技术开发 频道

7种结构型设计模式简单对比

【IT168 分析评论】

    7种结构型设计模式是下面7种:

    Adapter适配器模式

    Bridge桥接模式

    Composite组合模式

    Decorator装饰模式

    Facade外观模式

    Flyweight享元模式

    Proxy代理模式

    对比:

    Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。

    Bridge模式的应用一般在“两个非常强的变化维度”。Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维护来变化。

    Composite模式采用树形结构来实现普遍存在的对象容器,从而将“一对多”的关系转化为“一对一”的关系,使得客户代码可以一致地处理对象和对象容器,无需关心处理的是单个的对象,还是组合的对象容器。将“客户代码与复杂的对象容器结构”解耦是Composite模式的核心思想,解耦之后,客户代码将与纯粹的抽象接口(而非对象容器的复杂内部实现)发生依赖关系,从而更能“应对变化”。

    通过采用组合、而非继承的手法,Decorator(装饰)模式实现了在运行时动态地扩展对象功能的能力,而且可以根据需要扩展多个功能。避免了单独使用继承带来的“灵活性差”和“多子类衍生问题”。

    从客户程序的角度来看,Facade(外观)模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Fa?ade接口的变化。Fa?ade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Fa?ade很多时候更是一种架构设计模式。

    面向对象很好地解决了抽象性的问题,但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight(享元)设计模式主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题。运用共享技术有效地支持大量细粒度的对象。

    Proxy并不一定要求保持接口的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。

    从接口的角度来看:

    Adapter模式注重转换接口;将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

    Bridge模式注重分离接口(抽象)与其实现;将抽象部分与它的实现部分分离,使它们都可以独立地变化。

    Decorator(装饰)模式注重稳定接口的前提下为对象扩展功能;动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更为灵活。

    Fa?ade外观模式注重简化接口;为子系统中的一组接口提供一个一致的界面,Fa?ade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

    Composite组合模式,更是简化接口,将“一对多”的关系转化为“一对一”的关系。将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。

    Proxy代理模式,为其他对象提供一个代理以控制对这个对象的访问。

 

0
相关文章