结构型设计模式是从程序的结构上解决模块之间的耦合问题(好像是句废话),
GoF23
种设计模式中结构型设计模式有
7
种,分别是:
Adapter
适配器模式、
Bridge
桥接模式、
Composite
组合模式、
Decorator
装饰模式、
Facade
外观模式、
Flyweight
享元模式和
Proxy
代理模式。下面分别总结一下这几种模式:
设计模式
|
GoF
的描述
|
我的理解
|
Adapter
适配器模式
|
将一个类的接口转换成客户希望的另一个接口。
Adapter
模式使得原本由于接口不兼容而不能一起工作的类可以一起工作
|
转换接口,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是,新环境要求的接口是现存对象所不满足的,此时我们可以通过添加一层
Adapter
对现有的对象加入一些接口,使其适应新的应用环境。
|
Bridge
桥接模式
|
将抽象部分与实现部分分离,使他们可以独立的变化
|
分离接口(抽象)与其实现,当某个类型具有两个或两个以上的纬度变化(或者说是变化点),通过以继承接口的方式隔离变化,以减少因变化带来的代码的修改量。
|
Composite
组合模式
|
将对象组合成树形结构以表示“部分
-
整体”的层次结构。
Composite
模式使得客户对单个对象和组合对象的使用具有一致性
|
解决客户程序与复杂对象容器的解耦,一类具有“容器特征”的对象——即他们在充当对象的同时,又是其他对象的容器的情况,通过继承统一的接口,我们可以将容器对象及其子对象看成同一类对象使用,以减少对象使用中的复杂度。
|
Decorator
装饰模式
|
动态的给一个对象添加一些额外的职责。就增加功能而言,
Decorator
模式比生成子类更为灵活
|
在稳定接口的前提下为对象扩展功能,主要是解决用继承的方式为对象扩展大量功能而造成的子对象数量膨胀的问题
|
Facade
外观模式
|
为子系统中的一组接口提供一个一致的界面,
Facade
模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
|
简化接口,对于复杂子系统或子对象调用的封装。从客户程序角度看,只能看见
Facade
提供的接口。换句话说是对子对象调用的封装,将客户程序对子对象的调用与子对象的变化分离。
|
Flyweight
享元模式
|
运用共享技术有效的支持大量细粒度的对象
|
主要是解决由于相同对象数量过大而造成系统内存开销过大的问题。实际上是相同的对象引用指向同一个对象空间。在使用
Flyweight
模式前要做一个评估,如果使用不当会适得其反
|
Proxy
代理模式
|
为其他对象提供一种代理以控制这个对象的访问
|
解决直接访问某些对象是出现的问题,如:访问远程的对象
|
在学习的过程中感觉,从代码的角度看
Adapter
适配器模式和
Proxy
代理模式有些类似,
Adapter
适配器模式是解决现有对象在新的环境中的不足,而
Proxy
代理模式是解决直接访问对象时出现的问题,这两种模式从使用角度看都是解决直接访问对象时出现的问题,只是含义不十分相同。