实际上适配器模式是用于解耦。设想一下我们的程序模块A在与模块B打交道时,需要在许多地方多次使用B中某个类的方法,而负责开发B的程序猿Tom还未完全实现该类,会随时更改该类中的方法,那么当Tom在修改时,负责A的攻城狮Jerry不得不进行苦逼的修改。聪明的项目经理Dabao想出了好方法——适配器模式,于是在Tom和Jerry之间进行了如下设计:

 /// <summary>
/// B中目前只定义了英雄KASS
/// </summary>
public class KASS
{
public void R()
{
//KASS的技能
}
} /// <summary>
/// 定义英雄的接口
/// </summary>
public class Hero
{
/// <summary>
/// 使用virtual修饰以便子类可以重写
/// </summary>
public virtual void attack()
{
//英雄进攻的方法和招数
}
} /// <summary>
/// 定义适配器
/// B暂时提供英雄KASS
/// </summary>
public class HeroAdapter:Hero
{
// 建立一个私有的英雄KASS对象
private KASS kass = new KASS(); /// <summary>
/// 通过重写,表面上调用attack()方法,实际调用R()
/// </summary>
public override void attack()
{
kass.R();
}
} /// <summary>
/// Tom负责的模块A
/// </summary>
public class A
{
public static void Main(string[] args)
{
// A需要借助B中的英雄完成进攻的任务,但B还未定下是那个英雄,所以不能直接创建特定英雄的对象
// 但我们知道肯定要一个英雄,并且需要这个英雄去进攻
Hero hero = new HeroAdapter();
hero.attack(); //...
}
}

详细说明:http://wp.662p.com/thread-8244-1-1.html

最新文章

  1. windows上面捕获声卡数据
  2. 记录sql语句的执行记录,用于分析
  3. C++之路进阶——bzoj1821(部落划分)
  4. CentOS访问Windows共享文件夹的方法
  5. Android -- 程序判断手机ROOT状态,获取ROOT权限
  6. -g vs -rdynamic
  7. Teradata 的rank() 和 row_number() 函数
  8. 判断手机还是PC浏览器
  9. [android开发之内容更新类APP]二、这几日的结果
  10. 我的Python成长之路---第二天---Python基础(8)---2016年1月9日(晴)
  11. 【web开发学习笔记】Structs2 Action学习笔记(一个)
  12. 企业架构研究总结(31)——TOGAF架构内容框架之内容元模型(下)
  13. git的学习笔记(二):git远程操作
  14. FIDDLER的使用方法及技巧总结
  15. 使用Apache JMeter对SQL Server、Mysql、Oracle压力测试(一)
  16. 8、jsのBOM对象与DOM对象
  17. python--第八天总结
  18. 虚拟机安装及配置(centOs7)
  19. JDBC使用MYSQL的LOAD DATA LOACAL INFILE和LOAD DATA INFILE
  20. Python 7 -- 文件存储数据

热门文章

  1. 【剑指Offer】2、替换空格
  2. jQuery cxCalendar 日期选择器
  3. NLP问题特征表达基础 - 语言模型(Language Model)发展演化历程讨论
  4. Linux命令及全称(部分)
  5. hdu 2444 交叉染色判断二分图+二分最大匹配
  6. fzoj 2113数位dp
  7. ExtJs之Ajax模式的表单数据加载
  8. 楼控-西门子-insight使用-软件重新授权
  9. 51nod——T1103 N的倍数
  10. vue-自定义组件传