上篇博文写了创建型模式中的(工厂家族)。这次来介绍一下结构型模式。主要从各个模式的含义,优缺点,适用场合及结构图来了解结构型模式。
结构型模式包括有7种模式,适配器模式,外观模式,代理模式,桥接模式,享元模式,组合模式,装饰模式。每个模式各有优缺,孰优孰劣,请看下文。
定义:将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
结构图:
适用于:想要使用一个已存在的类,但接口和你的要求不同时
在软件开发后期或是维护时期,在双方都不太容易修改时
优点:让接口不同的类通过适配,协同工作。
定义:为系统中的一组接口提供一个一致的界面,它定义一个高层接口,使得这一子系统更加容易使用。
结构图:
优点:对客户屏蔽了子系统组件,使得用户处理的对象数目减少,使系统用起来更容易。
实现了子系统与用户之间的松耦合,
适用于:当要为复杂子系统提供一个简单接口时
将不同的两个层分离,在层与层之间建立外观
定义:为对象提供一种代理以控制对这个对象的访问。
结构图:
优点:
职责清晰,真实的角色就是实现实际业务逻辑,不用关心其他费本职责的事务,通过后期的代理完成一件完成事务,结果就是变成简洁清晰。
代理对象可以在客户端和目标对象之间起到中介作用。
高扩展性。
适用于:
远程代理:为一个对象在不同地址空间提供局部代表。
虚拟代理:更具需要创建开销很大的对象。
安全代理:用来控制真实对象访问时的权限。
智能指引:当调用真实对象时,代理处理另外一些事。
1.代理VS外观,代理对象代表一个单一对象而外观对象代表一个子系统。
2.代理的客户对象无法直接访问目标对象。
外观的客户对象可直接访问子系统中的各个对象。
3.代理是一种原来对象的代表,其他需要与这个对象打交道的操作都和这个代表交涉。
适配器不需要虚构一个代表者,只需为应付特定使用目的,将原来的类进行一些组合。
4.外观和适配都是对现有系统的封装。外观定义的是一个新系统,适配是复用原有的接口。
定义;动态给对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。
结构图:
优点:
装饰模式与集成关系的目的都是要扩展对象的功能,但装饰模式尅提供更多的灵活性,
通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可创造出很多不同的行为组合。
缺点: 比继承更灵活的特性,也意味着增加了复杂性
使设计中出现许多类,若过度使用,会使程序变得复杂。
定义:将抽象部分和实现部分分离,使得它们都可以独立的变化。
结构图:
过度使用继承会导致类的结构过于复杂,难维护,扩展性差。通过解耦这些不同的变化,把继承关系改为组合,使得两者各自独立变化(即合成聚合复用原则)。
定义:将对象组合成树形结构以表示‘部分—整体’的层次结构,组合模式使得用户和组合对象的使用具有一致性。
结构图:
定义:运用共享技术有效支持大量细粒度的对象。
结构图:
使用共享物件,用来尽可能的减少内存使用量及分享资讯给尽可能多的相似物件。
它适用于只因为重复而导致使用无法令人接受的大量内存的大量物件。
原文地址:http://blog.csdn.net/u010542940/article/details/26817365