结构型模式小结

     一、定义(definition)

             结构型模式涉及到如何组合类和对象以获得更大的结构。结构型模式采用继承机制来组合接口或实现。结构型对象模式不是对接口和实现进行组合,而是描述了如何 对一些对象进行组合,从而实现新功能的一些方法。因为可以在运行时刻改变对象组合关系,所以对象组合方式具有更大的灵活性,而这种机制用静态类组合是不可 能实现的。

    二、使用(Use)

             从程序的结构上解决模块之间的耦合问题

    三、联系(link)

    1、类模式

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

    2、对象模式

  • 桥接模式 Bridge :将抽象部分与它的实现部分分离,是它们都可以独立地变化。
  • 组合模式 Composite :将对象组合成树形结构以表示部分-整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。
  • 装饰模式 Decorator:动态地给一个对象添加一些额外的职责,就增加功能来说,它比生成子类更灵活。
  • 外观模式 Facade :为子系统中的一组接口提供了同意的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
  • 享元模式 Flyweight :为运用共享技术有效的支持大量细粒度的对象。因为它可以通过共享大幅度地减少单个实例的数目,避免了大量非常相似类的开销。.
  •  代理模式 Proxy : 为其他对象提供一种代理,并由代理对象控制对原对象的引用,以间接控制对原对象的访问。

    四、区别(distinguish)

    1、代理模式与装饰模式:它们的意图都是提供间接访问对象层,都保存被调用对象的引用。

              代理模式(Proxy):为另一个对象提供一个替身或占位符以控制对这个对象的访问,简而言之就是用一个对象来代表另一个对象。

              装饰者(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式比生成子类更为灵活,它避免了类爆炸问题, 像装饰者(Decorator),代理模式(Proxy)组成一个对象并提供相同的接口,但代理模式并不关心对象动态职能的增减。

              在代理模式(Proxy)中Subject定义了主要的功能,而且Proxy根据Subject提供功能控制对象的访问权限。在装饰者(Decorator)中Component只是提供了其中的一些功能,需要通过装饰链动态给对象增加职能。

    2、代理模式与适配器模式区别

           从代码的角度看Adapter适配器模式和Proxy代理模式有些类似,前者是解决现有对象在新的环境中所遇到的问题,后者是解决直接访问对象时出现的问题,这两种模式从使用角度看都是解决直接访问对象时出现的问题,只是含义不十分相同。

    3、装饰者模式,适配器模式,外观模式三者之间的区别:

    装饰者模式的话,它并不会改变接口,而是将一个一个的接口进行装饰,也就是添加新的功能。

    适配器模式是将一个接口通过适配来间接转换为另一个接口。

    外观模式的话,其主要是提供一个整洁的一致的接口给客户端。

    4、桥接模式与适配器模式区别

    适配器模式:用来帮助无关的类协同工作,它通常在系统设计完成后才会被使用。然而,Bridge模式则是在系统开始时就被使用,它使得抽象接口和实现部分可以独立进行改变。

    5、桥接模式与装饰的区别:

    装饰模式:

          这 两个模式在一定程度上都是为了减少子类的数目,避免出现复杂的继承关系。但是它们解决的方法却各有不同,装饰模式把子类中比基类中多出来的部分放到单独的 类里面,以适应新功能增加的需要,当我们把描述新功能的类封装到基类的对象里面时,就得到了所需要的子类对象,这些描述新功能的类通过组合可以实现很多的 功能组合 .

    桥接模式:

           桥接模式则把原来的基类的实现化细节抽象出来,在构造到一个实现化的结构中,然后再把原来的基类改造成一个抽象化的等级结构,这样就可以实现系统在多个维度上的独立变化 。

    6、组合模式与享元模式、装饰模式联系与区别

    1)装饰模式;经常与Composite模式一起使用。当装饰和组合一起使用时,它们通常有一个公共的父类。因此装饰必须支持具有 Add、Remove和GetChild 操作的Component接口。

    2)享元模式:让你共享组件,但不再能引用他们的父部件。

相关文章
相关标签/搜索