一、结构型设计模式概述
结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。
这些结构型模式,它们在某些方面具有很大的相似性,但是侧重点却各有不同。
结构型模式描述的是如何组合类和对象以获得一个更大的结构,不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。
本文将采用区分其中设计模式的不同点和相同点来进行对结构型设计模式的总结。
这七种设计模式分别为:适配器模式(Adapter)、装饰模式(Decorator)、桥接模式(Bridge)、组合模式(Composite)、享元模式(Flyweight)、代理模式(Proxy)、外观模式(Facade)。
二、结构型设计模式中各模式的区别与联系
1、代理模式与(装饰模式、外观模式、适配器模式)
a、代理模式与装饰模式
相同点:都描述了怎样为对象提供一定程度上的间接引用,实现时,都保留了指向另一个对象的指针。
不同点:设计目的不同,代理模式的目的是当直接访问一个实体不方便或不符合需要时,为这个实体提供一个替代者。装饰模式适用于编制时不能确定对象的全部功能的情况。
b、代理模式与外观模式
代理与外观的主要区别在于,代理对象代表一个单一对象而外观对象代表一个子系统;代理的客户对象无法直接访问目标对象,由代理提供对单独的目标对象的访问控制,而外观的客户对象可以直接访问子系统中的各个对象,但通常由外观对象提供对子系统各元件功能的简化的共同层次的调用接口。
c、代理模式与适配器模式
代理与适配器模式,其实都是属于一种衔接性质的功能。代理是一种原来对象的代表,其他需要与这个对象打交道的操作都是和这个代表交涉。而适配器则不需要虚构出一个代表者,只需要为应付特定使用目的,将原来的类进行一些组合。
2、装饰模式与(组合模式、桥接模式)
a、装饰模式与组合模式
相同点:递归组合;
不同点:目的不同,装饰模式不需要生成子类即可给对象添加职责;组合模式使得多个相关对象能够以统一的方式处理,多长对象可以被当做一个对象处理,重点不在装饰,而在于表示。
b.桥接模式与装饰模式
这两个模式在一定程度上都是为了减少子类的数目,避免出现复杂的继承关系。但是它们解决的方法却各有不同,装饰模式把子类中比基类中多出来的部分放到单独的类里面,以适应新功能增加的需要,当我们把描述新功能的类封装到基类的对象里面时,就得到了所需要的子类对象,这些描述新功能的类通过组合可以实现很多的功能组合
桥接模式则把原来的基类的实现化细节抽象出来,在构造到一个实现化的结构中,然后再把原来的基类改造成一个抽象化的等级结构,这样就可以实现系统在多个维度上的独立变化
3、适配器模式与桥接模式
相同点:给另一对象提供一定程度上的间接性,从而有利于系统的灵活性。
都涉及从自身以外的一个接口向这个对象转发请求。
不同点:适配器解决的是两个已有接口间不匹配的问题。
桥接模式对抽象接口和它的(可能是多个)实现部分进行桥接。
它们两个应用于软件生命期的不同阶段,适配器在类已经设计后实施;桥接模式在设计类之前实施。
4、享元模式与外观模式
享元模式解决的是由于大量的细粒度对象所造成的内存开销的问题,它与外观模式恰好相反,关注的重点是细小的对象。享元模式是让对象共享机制,而外观模式是如何用单个对象表示整个系统。
三、总结各模式
适配器模式:通过类的继承或者对象的组合侧重于转换已有的接口;
桥接模式通过将抽象和实现相分离,让它们可以分别独立的变化,它强调的是系统沿着多个方向的变化;
装饰模式采用对象组合而非继承的手法,实现了在运行时动态的扩展对象功能的能力,它强调的是扩展接口;
组合模式模糊了简单元素和复杂元素的概念,它强调的是一种类层次式的结构;
外观模式将复杂系统的内部子系统与客户程序之间的依赖解耦,它侧重于简化接口,更多的是一种架构模式;
享元模式解决的是由于大量的细粒度对象所造成的内存开销的问题,它与外观模式恰好相反,关注的重点是细小的对象;
代理模式为其他对象提供一种代理以控制对这个对象的访问,它注重于增加间接层来简化复杂的问题。
本文链接:http://blog.csdn.net/caozhangyingfei0109/article/details/8613777
本文作者:廊坊师范学院信息技术提高班九期张薄