设计模式——结构型模式

结构型模式:关注于整体最终的结构,通过继承和组合,构建出更加复杂的结构,从而提供更加强大的逻辑功能

通过结构类型可以分为类结构和对象结构,类结果主要关心类的组合,由多个类可以组合成一个更大的系统;对象结构关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式

一、适配器模式:将一个类的接口转换为客户希望的另一个接口,达到不同类相互协作的作用。

适用情况:

       1.使用一个已经存在的类,但不符合现有的接口规范,无法直接去访问。
       2.有一个类,希望可被多处访问,可以创建适配器来将这个类来适配其他没有提供合适接口的类。 

二、桥接模式:抽象与实现分离,是他们可以相互独立变换

适用情况:一个类存在两个独立变化时,减少因继承结构带来的具体类数量,可将变化进行抽象化,再用关联方式将其联系起来

优点:客户端面向两个维度抽象层编程,新增扩充抽象类或具体实现类不需要修改其他任何代码,很好的符合了"依赖倒转原则"与"开闭原则"

三、组合模式:将对象组合成树形结构,表示部分—整体的层次结构

适用情况:具有整体和部分层次结构中,希望用户忽略组合对象与单个对象不同。

优点:客户端代码与复杂的对象结构解耦, 可以更容易地往组合对象中加入新的内容。

四:装饰器模式:动态的给对象添加职责,比生成子类更灵活。

(将一个对象的多个功能点进行分离,从而能够动态的组合以形成更强大的功能)

适用情况:代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系。

优点:使用更加灵活,同时避免类型体系的快速膨胀,可以在运行期间动态增加功能方式。降低了继承带来的耦合,符合”合成复用原则“,同时抽象层的定义也符合”开闭原则“

五、外观模式:为子系统中的一组接口提供一个一直的界面

适用情况:简化客户端与复杂子系统间的操作,引入外观角色来为复杂子系统提供简化的入口

优点:为客户端提供很便利,将客户端与子系统的内部复杂性分隔开,只与外观角色交互即可。降低了客户与子系统耦合度,符合"迪米特法则"。

六、享元模式:共享技术支持大量粒度对象

(将事物自身内部核心状态与外部状态进行分离,进而减少核心状态的存储运行消耗)

适用情况:创建很多对象,且这些对象存在许多相同模块,这时可以将这些相同的模块提取出来采用享元模式生成单一对象,再使用这个对象与之前的诸多对象进行配合使用。

七、代理模式:为其他对象体重一种代理,控制对这个对象的访问

适用情况:为现有对象的使用提供额外的控制,不需要修改现有类与客户端调用

优点:可以隐藏委托类的实现,实现客户与委托类间的解耦,在不修改委托类代码的情况下能够做一些额外的处理。提高系统各个模块的工作效率。

     结构型模式的核心就是“分离,解耦”。在“分离,解耦”之后在通过某种形式建立联系,比如组合,聚合等。将抽象与实现进行分离,分离使各自的扩展变得更为容易,已经相互独立的两个事物也可以通过一定形式的结合也可以达到协同工作的效果。
 

发布了40 篇原创文章 · 获赞 10 · 访问量 7124

猜你喜欢

转载自blog.csdn.net/xyzyhs/article/details/103164185