博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用OC认识设计模式(二) 结构型模式
阅读量:6903 次
发布时间:2019-06-27

本文共 1770 字,大约阅读时间需要 5 分钟。

####结构型模式 #####1、适配器模式 定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 有两种类型:类适配器、对象适配器 ######(1)类适配器(Adapter) 定义:类适配器是通过继承来适配两个接口,(OC没有多重继承,用协议)

Demo例子:

// Target.h 协议@protocol Target 
- (void)request;@end复制代码
@implementation Adaptee- (void)specificRequest{    NSLog(@"specificRequest");}复制代码
// 适配对象,继承Adaptee类,现实Target协议// Adapter.h@interface Adapter : Adaptee
@end // Adapter.m@implementation Adapter- (void)request{ [self specificRequest];}@end复制代码

使用代码:

Adapter *target = [[Adapter alloc] init];      [target request];复制代码

######(2)对象适配器 定义:对象适配器不继承被适配者,而是组合了一个对它的引用。

// Target.h 协议@protocol Target 
- (void)request;@end复制代码
@implementation Adaptee- (void)specificRequest{    NSLog(@"specificRequest");}复制代码
// 适配对象,持有Adaptee对象,现实Target协议// Adapter.h@interface Adapter :
@property (nonatomic, strong) Adaptee *daptee;@end // Adapter.m@implementation Adapter- (void)request{ [_adaptee specificRequest];}@end复制代码

使用代码:

Adapter *target = [[Adapter alloc] init];     target.abaptee = [[Adaptee alloc] init];     [target request];复制代码

最后两者区别就是:一个是继承Adaptee类,一个是持有abaptee对象

#####2、桥接模式 定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化

一般的设计模式

当我们增加一个手机品牌HTC,按照品牌分类的话我们需要增加手机品牌类HTC,还需要增加两个手机软件类HTC的QQ、HTC的微信;同样,如果需要增加一个手机软件,那么按照手机软件分类的话,我们也是需要增加三个类。当我们需要增加更多的手机品牌和手机软件时,我们会发现类会越来越多,以致无法维护。

桥接的设计模式:

代码截图:

#####3、装饰器模式 装饰模式能动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式会比通过继承生成子类更为灵活。

OC的Category 就是装饰器模式的一种应用

#####4、组合模式 定义:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 代码截图:

#####5、外观模式 定义:外观模式要求一个子系统的外部与内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口,用来访问子系统中的一群接口。

代码截图: 绿框就是:提供一个高层次的接口,用来访问子系统中的一群接口

#####6、享元模式 定义:运用共享技术有效地支持大量细粒度的对象。

OC代码:UITableViewCell 重用机制就是享元模式的典型应用 简单的代码:

#####7、代理模式 定义:为其他对象提供一种代理以控制对这个对象的访问(这个和对象适配器模式差不多) 代码截图:

转载地址:http://bkqdl.baihongyu.com/

你可能感兴趣的文章
LNMP的基础上搭建wordpress
查看>>
祝福你的旅行
查看>>
Vsftp搭建(一)与PAM验证 SSL加密 登陆
查看>>
Ubuntu Server 18.04 配置 rsync(xinetd)
查看>>
ClassNotFoundException 和 NoClassDefFoundError 区别
查看>>
我的友情链接
查看>>
IOS面试题(五)
查看>>
特征提取概述
查看>>
第十周作业
查看>>
使用Python在Windows下调用Winrar备份文件
查看>>
shell学习笔记三
查看>>
我的友情链接
查看>>
纯CSS超过宽度显示省略号
查看>>
17款jQuery在线QQ客服代码分享
查看>>
ipsec在企业网中的应用
查看>>
iptables笔记
查看>>
Kali Linux 教程 之 Kali Linux 更新源
查看>>
xshell远程qemu-kvm虚拟机安装
查看>>
×××配置实例_06:分支机构到中心站点动态IPSEC ×××配置
查看>>
利用开源的驰骋工作流程引擎,生产类企业应用案例之三
查看>>