阅读 85

结构型设计模式

  • 结构型设计模式

        结构型设计模式,讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。这些结构型模式,它们在某些方面具有很大的相似性,仔细推敲,侧重点却各有不同。


      一、详述各结构型模式


        结构型设计模式一共包括7中设计模式,它们分别是:适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、代理模式(Proxy)。

        1、适配器模式

        定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

        解释:通过类的继承或者对象的组合,侧重于转换已有的接口。

        

        2、桥接模式

        定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

        解释:它强调的是系统沿着多个方向的变化。

        

        3、组合模式

        定义:将对象组合成树形结构以表示‘整体-部分’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

        解释:组合模式模糊了简单元素和复杂元素的概念,它强调的是一种类层次式的结构。

        

        4、装饰模式

        定义:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。

        解释:采用对象组合而非继承的手法,实现了在运动时动态的扩展对象功能的能力,它强调的是扩展接口。

        

        5、外观模式

        定义:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

        解释:将复杂系统的内部子系统与客户程序之间的依赖解耦,它侧重于简化接口,更多的是一种架构模式。

        

        6、享元模式

        定义:为运用共享技术有效地支持大量细粒度的对象。

        解释:它解决的是由于大量的细粒度对象所造成的内存开销的问题,它与外观模式正好想法,关注的重点是细小的对象。

        

        7、代理模式

        定义:为其他对象提供一种代理以控制对这个对象的访问。

        解释:它注重于增加间接层来简化复杂的问题。

        


       二、各结构型模式的区别与联系


        1、桥接模式与装饰模式

        这两个模式在一定程度是都是为了减少子类的数目,避免出现复杂的继承关系。但是他们解决的方法各有不同。

        装饰模式把子类中比基类中多出来的部分放到单独的类里面,以适应新功能增加的需要,当我们把描述新功能的类封装到基类的

    对象里面时,就得到了所需要的子类对象,这些描述新功能的类通过组合可以实现很多的功能组合。桥接模式则是把原来基类的实

    例化细节抽象出来,在构造到一个实现化的结构中,然后再把原来基类改造成一个抽象化的等级结构,这样就可以实现系统在多个

    维度上的独立变化。

        2、外观模式和代理模式

        代理与外观的主要区别在于,代理对象代表一个单一对象而外观对象代表一个子系统;代理的客户对象无法直接访问目标对象,由代理提供对单独的目标对象的访问机制,而外观的客户对象可以直接访问子系统中的各个对象,但通常由外观对象提供子系统各元件功能的简化的共同层测的调用接口。

        3、代理模式与适配器模式

        两者其实都是属于一种衔接性质的功能。

        代理是一种原来对象的代表,其他需要与这个对象打交道的操作都是和这个代表交涉。而适配器则不需要虚构出一个代表者,只需要为应付特定使用目的,将原来的类进行一些组合。


        参考资料:  .NET设计模式(15):结构型模式专题总结 -Terrylee

                            设计模式之结构型篇

                            大话设计模式(清华大学出版社-程杰著)


文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐