设计模式学习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();
Subject subject = new ProxySubject();
subject.request();
代理模式与装饰模式:二者有共同点:装饰与被装饰者,代理与被代理者都具有相同的接口。但是用意不同,装饰模式意在增强被装饰对象的功能,而代理模式意在对被代理对象施加控制。
享元模式
系统需要共享大量的具有不可区分的内部状态的对象(内蕴对象),而这些对象的大部分状态可以外部化。优点:降低内存中对象的数量java中的String对象就是享元对象,一旦创建出来就不会改变,相同的String对象是共享的。
使用的时机:一个系统可能并不需要这么多的独立的实例,而只需要为每一种不同的状态创建一个对象,让整个系统共享这个对象--字母就是一个享元,其包括自己的形体组成,字体就是字母的外蕴状态,可以实时添加。系统中,字母可以共享,字体也可以共享。
门面模式
简化子系统的接口
- 设计模式学习3-结构模式
- 结构型设计模式学习
- 设计模式-结构模式
- 设计模式学习笔记:结构型模式之外观模式
- 设计模式深入学习---Component组合模式(结构型模式)
- 设计模式深入学习---Decorator装饰模式(结构型模式)
- 设计模式深入学习--Proxy 代理模式(结构型模式)
- 设计模式深入学习---Adapter 适配器模式(结构型模式)
- 设计模式学习-GOF结构型设计模式
- JAVA设计模式-3-结构型模式
- 结构型设计模式学习笔记
- 设计模式 学习 3:
- 设计模式学习(3)
- 设计模式学习阶段性总结之结构型模式
- 设计模式学习笔记——结构模式
- 设计模式学习笔记——结构模式(总结)
- 设计模式学习笔记(六):结构型模式
- 设计模式学习笔记--结构类模式(三)
- Delphi中ShellExecute函数使用详解
- 通过引索获取hashtable中的key,value
- Delphi用Socket API隐藏自己的真实IP
- 线程同步简述
- Delphi用Socket IP/UDP局域网广播
- 设计模式学习3-结构模式
- Delphi中拦截其它程序的网络数据封包
- 关于指针,对象周期,构造函数等的一些测试
- 关于Find对话框的使用
- C语言中位移位运算符
- 好中层的八个标准:如何成为一名优秀的管理者
- Delphi编写无DLL版穿墙的下载者
- struts2 sitemesh不起作用(问题已解决)
- Delphi中完成端口(IOCP)的简单分析