设计模式学习3-结构模式

来源:互联网 发布:安全风险评估矩阵图 编辑:程序博客网 时间:2024/05/23 17:56
 

适配器模式

 

需要融合具有相似功能的但是具有不同接口的模块

应用:WINE--在linux上运行windows程序的平台,其实可以看成架构上的适配器。windows程序不需要修改过代码就能够直接在linux上运行。

MKS Toolkit, 提供了shell命令到windows命令的转换,使得用户可以再windows上运行shell命令。

合成模式

需要考虑部分和整体的等级结构,客户需要忽略个体构件和组合构件的区别--即需要平等对待所有组件

文件系统:把目录和文件当做同一种对象对待--合成模式应用的典型场合。


透明方式:在Component中添加add(),remove(),getChild(),方法。优点是透明(分不出叶子和树枝),缺点是不安全--叶子有add()等方法,编译时不出错,运行时出错。

安全方式:只在Composite中添加管理子对象的方法。

使用合成模式的时机:

    1 需要考虑对象的部分和整体的等级结构
    2 需要客户忽略个体构建和组合构建的区别,客户需要平等对待所有构件

装饰模式

需要动态的增强某些对象的功能,而且要具有比继承更加丰富的灵活性

    以对客户透明的方式扩展对象的功能,是继承关系的一个替代方案

使用装饰模式的时机:

    1 需要动态的给一个对象增加责任,这个责任还可以撤销
    2 需要增加由一系列基本功能组合而成的非常强大的功能。

装饰模式的优缺点:

优点: 扩展对象功能,装饰模式具有更高的灵活性--可以动态的贴上或除掉功能。
         通过不同装饰的组合,可以创造出很多不同的行为。
缺点: 灵活性也意味着更容易出错

与其他模式的关系:


装饰器模式与适配器模式:用意不同,一个是维持接口增强性能,另一个是改变接口。

与策略模式:用意不同:装饰模式是要替换外表,保留内心,而策略模式主要实现算法的可替代性。


代理模式

对真实的对象的访问需要加以控制

间接的“美”:降低耦合度

代理的种类

远程代理(访问远程对象就像访问本地对象一样)、虚拟代理、保护代理、防火墙代理、同步化代理、智能引用(在对真实的对象访问之前或之后增加检查或记录功能)



在使用的时候将引用声明为抽象主题,实际对象创建一个代理主题。
Subject subject = new ProxySubject();
subject.request();




代理模式与装饰模式:二者有共同点:装饰与被装饰者,代理与被代理者都具有相同的接口。但是用意不同,装饰模式意在增强被装饰对象的功能,而代理模式意在对被代理对象施加控制。

享元模式

系统需要共享大量的具有不可区分的内部状态的对象(内蕴对象),而这些对象的大部分状态可以外部化。优点:降低内存中对象的数量

java中的String对象就是享元对象,一旦创建出来就不会改变,相同的String对象是共享的。

使用的时机:一个系统可能并不需要这么多的独立的实例,而只需要为每一种不同的状态创建一个对象,让整个系统共享这个对象--字母就是一个享元,其包括自己的形体组成,字体就是字母的外蕴状态,可以实时添加。系统中,字母可以共享,字体也可以共享。

门面模式

简化子系统的接口



 

原创粉丝点击