设计模式系列(三)-- 结构型

2019/2/27 posted in  设计模式

具体的实现Demo请进入DesignPatterns iOS工程实现查看

6. 适配器模式

适配器模式将某个类的接口转换成客户端期望的另一个接口表示。目的是消除由于接口不匹配所造成的类的兼容性问题。分为3类,类适配器,对象的适配器

  1. 类适配器
    所谓的类适配器,指的是适配器Adapter继承我们的被适配者Adaptee,并实现目标接口Target。

  2. 对象适配器
    所谓的对象适配器,就是适配器实现我们的接口,但是并不继承需要被适配的类。而是通过在构造函数中将需要被适配的类传递进来从而进行适配(也就是组合的形式)。

它们的特点(至于特点,可以从它们的实现方法取考虑)
类适配器只能适配一个类,而对象适配器可以将不同的待适配者适配到统一目标。
而类适配器由于是继承,可以置换待适配对象的一些方法。

7. 外观模式

外观模式让子系统更加易用,使用端不需要了解子系统的内部的实现。
也不需要跟众多子系统的内部的模块进行交互,只需要跟门面交互就可以了。外观角色好比一道屏障,对客户端屏蔽了子系统的具体实现。

8. 桥接模式

桥接模式的场景:
类似于绘制形状,有多个形状,每个形状的颜色还不一样。为每种形状都提供各种颜色的版本,会造成n*n个类。

这是可以采用桥接模式,将继承关系转换成关联关系,为每种形状都提供各种颜色的版本。
桥接模式的本质是将继承关系转换成关联的关系。从而降低了类与类之间的耦合度,减少了系统中的类的数量,也减少了代码量。

9. 装饰

有这样一个场景,购买咖啡时,可以要求在其中加入各种调料。例如
豆浆,摩卡,蒸奶,有时添加,有时不添加。这样就会导致类的爆炸,并且无法满足混合添加,多次添加的的情况。
关键的实现装饰类的实现

装饰类的设计,装饰类既有主类的属性,本类也是主类类型。这样可以递归的方式来获得最总被装饰了的对象。

10. 代理

代理不说了,开始做iOS时就是代理模式。

11. 享元

享元就是共享对象。既可以内存缓存对象,也可复用对象(通过一个唯一的标识)。

12. 组合模式

我的理解,组合的设计模式在这里有两层含义。
一层含义:对象包含对象的问题,通过组合的方式(在对象内部引用对象)来进行布局。
二层含义:引申到树形结构的对象包含对象。