【返回目录】

某地新建了一座怀旧风格的酒店,一切都按照上个世纪中期的欧美风格来设计。当地一个颇有实力的电器批发商好不容易抢到了一张订单,这家酒店要购进100个怀旧风格的电风扇。批发商找到当地一个颇有规模的电器生产厂家,该厂家正好有一个型号的电风扇是怀旧风格的,但不巧的是,这批电风扇都是两向插头,而酒店需要的是三向的。你认为生产厂家会怎么办,告诉批发商:“对不起,这单生意我们做不了。”或是“去,告诉酒店老板,让他们修改电路,给电风扇准备好一个两向插口。”呢?显然,任何一个正常的老板都知道,最明智的办法就是让电风扇具备一个二转三的转接头,这样的做法是最快也是最有效率的。

Adapter(适配器)模式就是用来解决这样场景的问题的,根据客户的需要转换类的接口,使得原本不兼容的类可以在一起工作。

   1: using System;
   2:  
   3: namespace Autumoon.DesignPatterns.Adapter
   4: {
   5:     public class OriginalFan
   6:     {
   7:         public virtual void WorkWithTwoPins(int pinAmount)
   8:         {
   9:             if (pinAmount != 2)
  10:             {
  11:                 return;
  12:             }
  13:  
  14:             Console.WriteLine("This fan can work with 2 pins.");
  15:         }
  16:     }
  17:  
  18:     public class HotelFan
  19:     {
  20:         public void WorkWithThreePins(int pinAmount)
  21:         {
  22:             if (pinAmount != 3)
  23:             {
  24:                 return;
  25:             }
  26:  
  27:             Console.WriteLine("This fan can work with 3 pins.");
  28:         }
  29:     }
  30:  
  31:     public class FanAdapter : OriginalFan
  32:     {
  33:         private HotelFan hotelFan = new HotelFan();
  34:  
  35:         public override void WorkWithTwoPins(int pinAmount)
  36:         {
  37:             hotelFan.WorkWithThreePins(pinAmount);
  38:         }
  39:     }
  40:  
  41:     public static class FanUsage
  42:     {
  43:         public static void ConnectFan(OriginalFan originalFan)
  44:         {
  45:             originalFan.WorkWithTwoPins(3);
  46:         }
  47:     }
  48: }

从上面的代码我们可以看到,我们有一个原厂生产的两向插头的电风扇OriginalFan类和一个酒店所使用的三项插头的HotelFan类,以及这二者中间所采用的转接头FanAdapter。接下来我们就用这个转接头使得这种原本两向插头的电风扇可以在酒店中使用吧。

   1: static void Main(string[] args)
   2: {
   3:     OriginalFan originalFan = new FanAdapter();
   4:     FanUsage.ConnectFan(originalFan);
   5:  
   6:     Console.ReadLine();
   7: }

3.1 Adapter(适配器)相关推荐

  1. android 之UI 高级控件Adapter(适配器详解)

    了解适配器组件: 适配器是一个连接数据源和AdapterView的桥梁,通过它能有效的实现数据源与AdapterView的分离设置,使AdaptereView与数据的绑定更加简便,修改更加方便. Ad ...

  2. Adapter适配器和base-adapter-helper库的使用

    文章目录 Adapter适配器 概述 关于视图重用 关于ViewHolder 使用步骤 base-adapter-helper库的使用 1.导入库 2.将库中的java文件复制到项目中 3.编译并解决 ...

  3. Android中使用Adapter(适配器)给RecycleView设置数据源

    场景 RecyclerView RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足.其可以实现数据纵向滚动,也 ...

  4. adapter 适配器

    定义: 适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 示例: 比如,水货的手机充电器插头是欧美标准(大头插座),中国的插座是 ...

  5. android中Adapter适配器的讲解

    android中Adapter适配器的讲解 Adapter(适配器的讲解) 适配器就我自己来看,我觉得这是一个非常重要的知识点,Adapter是用来帮助填出数据的中间桥梁,简单点说吧:将各种数据以合适 ...

  6. Adapter适配器与具体应用

    Adapter适配器与具体应用 一.Adapter介绍: 1.Adapter是什么:Adapter适配器是沟通数据与视图的桥梁,用于对要进行显示的数据进行处理, 并通过与视图对象的绑定从而将数据显示到 ...

  7. Android适配器以及作用,Android Studio:自定义Adapter(适配器)的一些通俗易懂的理解(以一个简单的聊天界面为例)...

    本文是博主对Adapter(适配器)的一些理解,为了加深对Adapter的理解以及记录自己的阶段学习而写,同时也适合初学者阅读,参考本条博客的逻辑进行学习. 第一  先来看看实现这个程序需要需要创建哪 ...

  8. Android - Adapter 适配器

    Android 适配器 本文介绍两个Adapter: ArrayAdapter:最简单的Adapter,只能展现一行文字. XML文件: <ListViewandroid:id="@+ ...

  9. Android Adapter适配器

    Android Adapter适配器 Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View. Andr ...

  10. UI组件之AdapterView及其子类(一)三种Adapter适配器填充ListView

    AdapterView的内容一般是包含多项相同格式资源的列表,常用的有5种AdapterView的子类: (1)ListView:简单的列表 (2)Spinner:下拉列表,给用户提供选择 (3)Ga ...

最新文章

  1. Bridge Pattern
  2. USACO / Stamps(DP)
  3. Flink JAR包上传和运行逻辑
  4. 解决安装rrdtool遇到的一个问题
  5. launch mysql_Mac Pro 开机自启动 PHP-FPM,Nginx,MySql 等软件
  6. SAP CRM Business Partner 自动决定Determination的执行逻辑
  7. 如何导入hadoop源码到eclipse
  8. POJ2718【DFS】
  9. freemarker空格问题
  10. 搜索框+ 定时器+Bug解决
  11. Ubuntu解决依赖关系问题
  12. linux系统pdf目录编辑器,Linux操作系统(三)编辑器与实用程序.pdf
  13. Juniper SRX240 U盘升级junos
  14. cisp-pte渗透工程师考试总结
  15. Fiddler抓包和Fiddler过滤器
  16. CAPL创建与语法简介
  17. 设计模式之外观模式(九)
  18. 每日一书丨Rootkit和Bootkit:现代恶意软件逆向分析和下一代威胁
  19. java长方体的父类_java的多级继承程序(题目:创建超类cuboid(长方体),其成员有height,width,length和计算机长方体的体积...
  20. java中PreparedStatement和Statement详细讲解

热门文章

  1. MySql设置外网访问
  2. jQuery 遍历方法
  3. PHP (20140506)
  4. 【干货】如果你的推广周期是一年,怎样激活100万目标用户
  5. 【pmcaff】打开页面,这个行为值多少钱?
  6. set,env和export命令显示shell变量其区别,与环境变量扫盲(一)
  7. 前端构建工具之争——Webpack vs Gulp 谁会被拍死在沙滩上
  8. popover带箭头弹框
  9. 使用vs2015开发linux:Ubuntu程序
  10. 怎样在谷歌浏览器上加载金山词霸的取词插件?