适配器模式
2015-08-19 16:20
369 查看
实例:
NBA运动员翻译
UML类图:
![](http://img.blog.csdn.net/20150819151734125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
实例实现代码:
客户端实现:
说明:
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
共有两类适配器模式:
对象适配器模式
-- 对象适配器不继承被适配者,而是组合了一个对它的引用;如下图:
![](http://img.blog.csdn.net/20150819155107500?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
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的引用
类适配器模式
-- 通过继承来适配两个接口;如下图:
![](http://img.blog.csdn.net/20150819155121529?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在Objective-C中,类可以实现协议,同时又继承超类,达到C++的多重继承效果,要在OC中实现类适配器,首先需要有定义了客户端要使用的一套行为的协议,然后要用具体的适配器类来实现这个协议,适配器类同时也要继承被适配者。
参考资料
-《大话设计模式》
-《OC编程之道》
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编程之道》
相关文章推荐
- Python 使用正则表达式 - 1
- 常见的浏览器分辨率
- php文件去重复,二维数组筛选
- 桌面支持--excel文档只读模式--有密码才能编辑
- RCP插件的配置
- 黑马程序员-java之快速排序的实现
- Android基础入门教程——2.3.9 RatingBar(星级评分条)
- 怎么获取Win10 10525 TH2 预览版更新推送并安装?
- 利用CSS布局做一个简单的荣誉证书
- 5.1 无继承情况下的对象构造
- 桌面支持--excel每页打印表头
- POJ 1228 Grandpa's Estate(判断是否稳定凸包)
- EventUtil
- Struts2配置json的各个属性
- IOS第11天(3:UIPickerView省市联动)
- CSS实现缩略图鼠标移上去显示大图
- 关于js设计模式的一些总结和理解
- Longest Ordered Subsequence(POJ--2533
- 如何获取播放H264原始数据文件的宽高信息(from SPS PPS)
- 生成随机验证码