结构型
定义
把一个类接口转换成另一个用户需要的接口。
桥接(Bridge)
定义
将抽象与实现分离开来,使它们可以独立变化
组合(Composite)
定义
将对象组合成树形结构来表示“整理/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。
装饰(Decorator)
定义
为对象动态添加功能
装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也保留了被装饰者的功能。可以看到,具体组件应当是装饰层次的最低层,因为只有具体组件的方法实现不需要依赖于其它对象。
外观(Facade)
定义
提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。
享元(Flywight)
定义
利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。
代理(Proxy)
定义
控制对其他对象的访问
Class Diagram
代理有以下四类:
- 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。
- 虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,它可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大图片时,不能马上完成,可以用虚拟代理缓存图片的大小信息,然后生成一张临时图片代替原始图片。
- 保护代理(Protection Proxy):按权限控制对象的访问,它负责检查调用者是否具有实现一个请求所必须的访问权限。
- 智能代理(Smart Reference):取代了简单的指针,它在访问对象时执行一些附加操作:记录对象的引用次数;当第一次引用一个对象时,将它装入内存;在访问一个实际对象前,检查是否已经锁定了它,以确保其它对象不能改变它。