适配器模式
来源:互联网 发布:kcf跟踪算法原理 编辑:程序博客网 时间:2024/05/18 22:17
实例:
NBA运动员翻译
UML类图:
实例实现代码:
//篮球运动员 abstract class Player { protected string name; public Player(string name) { this.name = name; } public abstract void Attack(); public abstract void Defense(); } //前锋 class Forwards : Player { public Forwards(string name) : base(name) { } public override void Attack() { Console.WriteLine("前锋 {0} 进攻", name); } public override void Defense() { Console.WriteLine("前锋 {0} 防守", name); } } //中锋 class Center : Player { public Center(string name) : base(name) { } public override void Attack() { Console.WriteLine("中锋 {0} 进攻", name); } public override void Defense() { Console.WriteLine("中锋 {0} 防守", name); } } //后卫 class Guards : Player { public Guards(string name) : base(name) { } public override void Attack() { Console.WriteLine("后卫 {0} 进攻", name); } public override void Defense() { Console.WriteLine("后卫 {0} 防守", name); } } //外籍中锋 class ForeignCenter { private string name; public string Name { get { return name; } set { name = value; } } public void 进攻() { Console.WriteLine("外籍中锋 {0} 进攻", name); } public void 防守() { Console.WriteLine("外籍中锋 {0} 防守", name); } } //翻译者 class Translator : Player { private ForeignCenter wjzf = new ForeignCenter(); public Translator(string name) : base(name) { wjzf.Name = name; } public override void Attack() { wjzf.进攻(); } public override void Defense() { wjzf.防守(); } }
客户端实现:
static void Main(string[] args) { Player b = new Forwards("巴蒂尔"); b.Attack(); Player m = new Guards("麦克格雷迪"); m.Attack(); //Player ym = new Center("姚明"); Player ym = new Translator("姚明"); ym.Attack(); ym.Defense(); Console.Read(); }
说明:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
共有两类适配器模式:
对象适配器模式
-- 对象适配器不继承被适配者,而是组合了一个对它的引用;如下图:
Adapter是一个Target类型,同时也是一个Adaptee类型。Adapter重载Target的request方法,但是Adapter没有重载Adaptee的specificRequest方法,而是在Adapter的request方法的实现中,调用超类的specificRequest方法。request方法在运行时向超类发送[superspecificRequest]消息。super就是Adaptee,它在Adapter的request方法的作用域内,按自己的方式执行specificRequest方法。只有当Target是协议而不是类时,类适配器才能够用OC来实现。
以上的例子中,Translator就是Adapter,ForeignCenter就是Adaptee,Translator组合了一个ForeignCenter的引用
类适配器模式
-- 通过继承来适配两个接口;如下图:
在Objective-C中,类可以实现协议,同时又继承超类,达到C++的多重继承效果,要在OC中实现类适配器,首先需要有定义了客户端要使用的一套行为的协议,然后要用具体的适配器类来实现这个协议,适配器类同时也要继承被适配者。
参考资料
-《大话设计模式》-《OC编程之道》
1 1
- 适配器及适配器模式
- 适配器及适配器模式
- 适配器模式(类适配器)
- 适配器模式(默认适配器)
- 适配器模式(对象适配器)
- 适配器模式-类适配器
- 适配器模式-对象适配器
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- VVDocumenter-Xcode注释插件
- UIP协议栈六 WEB
- 二分之求零点
- 数据结构 C语言实现选择排序
- 关于fragment的构造函数问题
- 适配器模式
- 远程执行命令的psexec工具的基本使用——简单、强大
- HDU 2094 产生冠军(拓扑排序)
- spring quartz定时器,及其动态处理方式
- 仿淘宝购物车demo---增加和减少商品数量
- javascript字符串
- HDU 4710 Balls Rearrangement
- 个人对深度优先搜索和广(宽)度优先搜索的理解
- BPM那些事儿——BPM的产生缘由