用OC认识设计模式(二)--结构型模式

用OC代码认识设计模式(一)--创建型模式
用OC代码认识设计模式(二)--结构型模式
用OC代码认识设计模式(三)--行为型模式
用OC代码认识六大设计原则

结构型模式

1、适配器模式

定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
有两种类型:类适配器、对象适配器

(1)类适配器(Adapter)

IOS设计模式浅析之适配器模式(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、桥接模式

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化

一般的设计模式


用OC认识设计模式(二)--结构型模式_第1张图片
一般分类.png

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

桥接的设计模式:

用OC认识设计模式(二)--结构型模式_第2张图片
桥接模式.jpg

代码截图:

用OC认识设计模式(二)--结构型模式_第3张图片
桥接模式.png
3、装饰器模式

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

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

4、组合模式

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

用OC认识设计模式(二)--结构型模式_第4张图片
组合模式.png
5、外观模式

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

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


用OC认识设计模式(二)--结构型模式_第5张图片
外观模式.png
6、享元模式

定义:运用共享技术有效地支持大量细粒度的对象。

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


用OC认识设计模式(二)--结构型模式_第6张图片
享元模式.png
7、代理模式

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

用OC认识设计模式(二)--结构型模式_第7张图片
代理模式.png

你可能感兴趣的:(用OC认识设计模式(二)--结构型模式)