结构型设计模式

简介: 结构型设计模式

组合模式:

为什么Leaf类和Composite类都有Add()和Remove()方法但是Leaf类不可以再增加分支?在Component中声明了所有管理子类的方法,Add()和Remove()。Leaf和Composite类都继承了Component类,这样Component的所有子类都具备了Add()和Remove(),叶节点和枝节点对于外界是没有任何区别的,但是Leaf类本身不具备Add()和Remove(),所以实现它是没有意义的,我们管这个叫做组合模式的透明模式。


享元模式:

享元模式的优点是相同对象只要保存一份,在享元模式中创建的对象是存在哈希表中的,而哈希表中是键值对的形式,不能有相同的key值,所以在享元工厂中的构造函数里面实例化对象的时候就可以加一个if判断,如果不存这个key值就新加一条数据在哈希表中,如果存在就返回当前哈希表中key值对应的value值。


桥接模式:


ce475c974975265ae49b6b3adf72e8ea.png


客户端中运用了一个里氏替换,父类型的子类对象,


0e72c816d84cefa724f799a8892ef94a.png


子类中是没有SetImplementor这个方法的,由于RefineAbstraction是Abstraction类的子类,所以父类中的成员变量和成员函数子类都可以使用,所以这里走是父类的SetImplementor方法。桥接模式定义:将抽象部分与它的实现部分部分分离,使他们可以独立变化,在前面的例子中这里的抽象部分指的是手机品牌,实现部分指的的是手机软件,桥接模式就是利用了一个聚合的关系将手机品牌和手机软件分离开,是他们可以独立变化,假如说要增加一个手机品牌或手机软件,只需要增加一个类就可以了,不会影响到其他类的变化。


装饰模式:

优点:把类中的装饰功能从类中搬移去除,这样可以简化原有的类。有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。


装饰的方法:


8ab764d813d6c53a1821af565ef892b6.png


。d1包装component对象,d2再包装d1对象,最后执行d2的Operation方法。


利用SetComponent来对对象进行包装,这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关系如何被添加到对象链中。


bfa291c131244182623c3acb0dce7ecf.png


利用一个if判断来进行封装对象的方法调用。所以客户端中只需要写一句调用Operation方法的语句,就可以把所有对象的功能输出出来,这就是封装对象和这块if判断的功劳。


目录
相关文章
|
设计模式 程序员
结构型设计模式之适配器模式
结构型设计模式之适配器模式
|
设计模式
结构型设计模式之装饰模式
结构型设计模式之装饰模式
|
设计模式 编解码 网络安全
结构型设计模式之代理模式
结构型设计模式之代理模式
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~结构型]不兼容结构的协调——适配器模式
[设计模式Java实现附plantuml源码~结构型]不兼容结构的协调——适配器模式
119 1
|
设计模式 安全 Java
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
118 1
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
|
设计模式 存储 缓存
第三篇 结构型设计模式 - 简化复杂系统的结构
第三篇 结构型设计模式 - 简化复杂系统的结构
154 0
|
设计模式 存储 Java
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
121 0
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型]处理多维度变化——桥接模式
[设计模式Java实现附plantuml源码~结构型]处理多维度变化——桥接模式
145 0
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式