设计模式学习3-结构模式
2009-11-26 13:49
295 查看
适配器模式
需要融合具有相似功能的但是具有不同接口的模块应用: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对象是共享的。
使用的时机:一个系统可能并不需要这么多的独立的实例,而只需要为每一种不同的状态创建一个对象,让整个系统共享这个对象--字母就是一个享元,其包括自己的形体组成,字体就是字母的外蕴状态,可以实时添加。系统中,字母可以共享,字体也可以共享。
门面模式
简化子系统的接口相关文章推荐
- 设计模式学习笔记——结构模式
- 设计模式学习笔记——结构模式(总结)
- 设计模式学习笔记--结构类模式(三)
- 个人学习-java-结构模式(23种设计模式)
- 【我的《冒号课堂》学习笔记】设计模式(2)结构模式
- 设计模式学习笔记(九)——Composite组合模式
- 设计模式学习--桥接
- 五 单一职责、开放—封闭、依赖倒转原则——设计模式学习笔记
- 设计模式学习(三)————单一职责原则
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(2)
- 跟着实例学习设计模式(2)-静态工厂(创建型)
- 学习head first 设计模式之单件模式
- 设计模式学习之单例模式
- 设计模式学习
- 工厂(factory)模式---C++ 设计模式之学习
- Java设计模式学习记录-简单工厂模式、工厂方法模式
- 设计模式学习5——原型模式
- 设计模式学习笔记(四)——Builder生成器模式
- JAVA与模式学习笔记之设计原则
- 设计原则(head first 设计模式)学习笔记