关于什么是适配器,一张图足以说明。

现在实现一下简单的适配器模式。现有的系统是WildTurkey,封装的目标厂商类是Duck。

分别看看这两者

WildTurkey

@protocol TurkeyProtocol <NSObject>
@required
- (void) gobble;
- (void) fly;
@end@interface WildTurkey : NSObject <TurkeyProtocol>{}
- (void) gobble;
- (void) fly;
@end@implementation WildTurkey
- (void) gobble{NSLog(@"Gobble gobble");
}- (void) fly{NSLog(@"short flying distance");
}
@end

Duck

@protocol DuckProtocol <NSObject>
@required
- (void) quack;
- (void) fly;
@end@interface MallardDuck : NSObject <DuckProtocol>{}
- (void) quack;
- (void) fly;
@end@implementation MallardDuck- (void) quack{NSLog(@"Duck Quack");
}- (void) fly{NSLog(@"Duck flying");
}
@end

最关键的,适配器如何对应两者的接口。

#import "DuckProtocol.h"
#import "TurkeyProtocol.h"
@interface TurkeyAdapter : NSObject <DuckProtocol>{id<TurkeyProtocol> _turkey;
}
- (id)initWithTurkey:(id<TurkeyProtocol>)turkey;
@end@implementation TurkeyAdapter
- (id)initWithTurkey:(id<TurkeyProtocol>)turkey{self = [super init];if (self) {_turkey = turkey;}return self;
}- (void)quack{[_turkey gobble];
}- (void)fly{for (int i = 0; i < 5; ++i) {[_turkey fly];}
}
@end

调用的时候用适配器进行封装,就直接可以调用对应的Duck的方法。

WildTurkey * turkey = [[WildTurkey alloc] init];
TurkeyAdapter * tkAdapter = [[TurkeyAdapter alloc] initWithTurkey:turkey];
[tkAdapter fly];

转载于:https://www.cnblogs.com/andywordsworth/archive/2012/05/04/2482028.html

Obj-C 实现设计模式 -- Adapter相关推荐

  1. 设计模式-Adapter模式

    目录 相关概念 对象适配器 类适配器 一个例子 总结 适配器模式(Adapter Pattern)是结构型模式.主要用来解决接口不兼容的问题,将一个类的接口变换成客户端所期待的另一种接口,从而使原本因 ...

  2. Java 设计模式 Adapter 对象适配器 模式

    Java 设计模式 Adapter 对象适配器 模式 Adapter模式用于现有的程序无法直接使用,需要做适当的变换之后才能使用的情况. 涉及到的角色 Target对象:定义所需的方法. Client ...

  3. [C# 设计模式] Adapter - 适配器模式(两种)

    Adapter - 适配器模式 序 现实生活中,我们常用到适配器. 你当前打开我这篇文章的笔记本电脑,电源的另一边不正连着一块适配器吗? 你平时想将三口插座插进二口插座里面,不也需要一个适配器吗? 整 ...

  4. 设计模式Adapter模式的五分钟

    五分钟一个设计模式.来形容叙述的设计模式的最简单方法.看到许多其他设计模式,请点击五分钟一个设计模式系列 http://blog.csdn.net/daguanjia11/article/catego ...

  5. 精读《设计模式 - Adapter 适配器模式》

    Adapter(适配器模式) Adapter(适配器模式)属于结构型模式,别名 wrapper,结构性模式关注的是如何组合类与对象,以获得更大的结构,我们平常工作大部分时间都在与这种设计模式打交道. ...

  6. 设计模式----Adapter(适配器)

    作用: 将一个类的接口转换成客户希望的另外一个接口.Adapt 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. UML示意图 1)采用继承原有接口类的方式 2)采用组合原有接口类的方式 ...

  7. C++设计模式-Adapter适配器模式

    Adapter适配器模式 作用:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 分为类适配器模式和对象适配器模式. 系统的数据 ...

  8. java设计模式adapter,java设计模式-适配器模式(Adapter)

    定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极 ...

  9. 结构型设计模式在公司项目中的运用实践

    关于设计模式的一些实战总结 -- 常见的结构型设计模式 在设计模式里面,有一种叫做适配器的设计模式 Adapter Design Pattern ,这类适配器模式通常应用于做不同接口之间的适配和调整, ...

  10. JAVA设计模式第三讲:结构型设计模式

    设计模式(design pattern)是对软件设计中普遍存在的各种问题,所提出的解决方案.本文以面试题作为切入点,介绍了设计模式的常见问题.我们需要掌握各种设计模式的原理.实现.设计意图和应用场景, ...

最新文章

  1. 再谈工作的主动性和有效提问
  2. 维塔与 Magic Leap 的MR游戏发布概念片
  3. 转帖:3D音频之双耳效应
  4. 从无到有算法养成篇-线性表实战篇
  5. Spring PropertyPlaceholderConfigurer Usage - 使用系统变量替换spring配置文件中的变量
  6. 喜欢的一些话(不断更新)
  7. 大数据技术之kafka (第 3 章 Kafka 架构深入 ) 高效读写数据
  8. 好想学python怎么玩_我用Python玩小游戏“跳一跳”,瞬间称霸了朋友圈!
  9. pytorch中unsqueeze()和squeeze()函数
  10. 惊心动魄的阿波罗登月:软件和程序员才是幕后的英雄
  11. VB.net 研华IO卡1762的编程方法 控件方法 VS2010专业版
  12. python弧度制转角度制_弧度制与角度制转换
  13. iPhone上传全景照片到谷歌街景地图攻略
  14. 强化学习—— Target Network Double DQN(解决高估问题,overestimate)
  15. Cesium本地加载地形(dem高程)数据
  16. Linux sudo命令报错:用户不在sudoers文件中
  17. 创业圈里那些魔性的拒绝史:张朝阳拒绝马化腾、马化腾拒绝马云...
  18. Ubuntu搭建LDAP服务器
  19. Python 调用 HTTP API 接口模板
  20. linux 易语言窗口程序_易语言开发Linux程序

热门文章

  1. 2013-06-18
  2. 没有文件扩展“.vbs”的脚本引擎的解决方案
  3. teambition 还是jira_我用过的那些测试过程管理工具TAPD、Teambition、CODING
  4. deebot地面清洁机器人怎么关_买扫地机器人还是吸尘器?看完你就明白了
  5. Unity的Scrollbar
  6. 设计模式之——原型模式
  7. 【渝粤教育】国家开放大学2018年春季 8662-22T特色课(1) 参考试题
  8. 【渝粤教育】电大中专学前儿童健康教育 (7)作业 题库
  9. 矩阵分解(MF)方法及代码
  10. FWT快速沃尔什变换