【结构型模式】是为解决怎样组装现有的类,设计他们的交互方式,从而达到实现一定的功能的目的。用来处理类或者对象的组合
1、 适配器模式(Adaptor)
适配器模式适用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,所以增加适配类。
它包括类适配器和对象适配器
类适配器一般使用继承带来了高耦合,不推荐使用
对象适配器采用“对象组合”的方式,更符合松耦合精神
2、 代理模式(Proxy)
代理模式就是为其他对象提供一种代理来控制对这个对象的访问。,C++智能指针是典型的应用场景。
a:远程代理 b:虚代理 c:保护代理 d:智能引用 e:cache代理 f:防火墙代理 g:同步化代理。
PS:
a:看起来代理模式的结构和策略模式类似,都是由一个类来装载接口的一个实例,策略模式是CContext来装载,代理模式是CWangPo来装载。
b:适配器Adapter为它所适配的对象提供了一个不同的接口。相反,代理提供了与它的实体相同的接口。
c:装饰器模式Decorator的实现部分与代理相似,但Decorator的目的不一样。Decorator为对象添加一个或多个功能,而代理则控制对对象的访问。
3、外观模式(Facade)
为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 a:它对客户屏蔽子系统组件
b:子系统的变化,不会影响到客户的使用,体现了子系统与客户的松耦合关系
c:如果客户希望使用词法分析器,只需定义词法分析的类对象即可,并不受到限制
4、 组合模式(Composite Pattern)
将对象组合成树形结构以表示“部分-整体”的层次结构,组合使得用户对单个对象和组合对象的使用具有一致性。
模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
5、 享元模式(Flyweight Pattern)
运用共享技术有效地支持大量细粒度的对象。抽取公共属性,节省空间内存。
内蕴状态(Internal State)和外蕴状态(External State)
内蕴状态:是存储在享元对象内部并且不会随环境改变而改变
外蕴状态是随环境改变而改变的、不可以共享的状态。
6、 桥接模式(Bridge Pattern)
将抽象部分与它的实现部分分离,使它们都可以独立地变化
操作系统 与 电脑品牌拆分 (设计中有超过一维的变化我们就可以用桥模式,两个基类,通过指针调用;各基类又存在多个不同的子类,进行桥接)
7、 装饰模式(Decorator Pattern)
装饰模式提供了更加灵活的向对象添加职责的方式。可以用添加和分离的方法,用装饰在运行时刻增加和删除职责。采用组合的方式而非继承。
装饰模式提供了一种“即用即付”的方法来添加职责。可以从简单的类逐步装饰成为复杂的
装饰模式中使用继承的关键是想达到装饰者和被装饰对象的类型匹配。
PS:
a:适配器也可以在转换时增加新的职责,但主要目的不在此。装饰者模式主要是给被装饰者增加新职责的。
b:适配器模式是用新接口来调用原接口,原接口对新系统是不可见或者说不可用的。 装饰者模式原封不动的使用原接口,系统对装饰的对象也通过原接口来完成使用。
c:关于其包裹的对象:适配器是知道被适配者的详细情况的。装饰者只知道其接口是什么,至于其具体类型只有在运行期间才知道。
【参考】https://blog.csdn.net/lcl_data/article/category/1373817