雨落天涯

问花花不语,为谁落,为谁开。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

       前面我们介绍了设计模式中的创建型模式,这一篇我们来介绍结构型模式。

结构型模式:顾名思义讨论的是类和对象之间的结构。它采用继承机制来组合接口或实现,(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。包括以下七种模式:

 

1.适配器模式(Adapter):将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式主要是为了解决两个已有接口之间不匹配的问题,它不需要考虑这些接口是怎样实现的,也不考虑它们各自可能会如何演化。换句话说,适配器模式不需要对两个独立设计的类中任一个进行重新设计,就能够使它们协同工作。


1.Target就是新系统所需要的接口,而Adapter实现了这个接口

2.Adapter需要承担的责任比较重大,它需要将Client对它的调用转换成对Adaptee的调用,起到适配的作用。

2.桥接模式(Bridge):将抽象部分与它的实现部分分离,使他们都可以独立地变化。桥接模式很好的满足了开放-封闭和合成/聚合复用原则。

 

桥接模式主要是将系统的实现部分独立出来,让它们各自地变化。换句话说就是,实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

 

桥接模式将变化进行封装,将强耦合转变为弱耦合。桥接模式的最大用意就是使用合成/聚合关系而不是继承关系,将它们的强关联改换成弱关联。

 

        3.组合模式(Component):将对象组合成树形结构以表示部分-整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。当发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对像与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了。

       组合模式在外形上就像是一棵有枝有叶的大树。这棵树的所有节点,都被抽象成Component。如果节点能包含节点,这些节点就是Composite,如果节点不能包含节点,这些节点就是Leaf



        4.装饰模式(Decorator):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。装饰者模式利用SetComponent来对对象进行包装。这样每个装饰对象的实现就和如何使用这个对象分离开了,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。

 


        5.外观模式(Facde):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是一种使用频率非常高的结构型设计模式,他通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。

 


         6.享元模式(Flyweight):为运用共享技术有效地支持大量细粒度的对象。享元模式通过共享大幅度的减少单个实例的数目。享元模式提供了一个共享资源的空间,将大家公共的部分抽象成一个共享类,而我们只需要实例化这个共享类的对象,就不必我们再去各个实例化各自的对象。

        例如,我们在QQ游戏大厅下的围棋游戏,每盘棋总共有361个空位上可以放棋子,如果我们要一个一个的去实现它们,那么就意味着我们要new出两三百个对象,如果我们用了享元模式来处理棋子,那么我们只需要实例黑棋和白棋这两个对象就可以了,然后每个棋子对它们进行复用,这就可以减少很多的内存空间,也就是说我们在使用享元模式之前,应该是一对一的关系,使用之后,变成了多对一的关系。



  7.代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。换句话说,就是用一个对象来代表另一个对象。代理的客户对象无法直接访问目标对象,由代理提供对单独的目标对象的访问控制。代理是一种原来对象的代表,其他需要与这个对象打交道的操作都是和这个代表交涉。

      代理模式精妙之点在于代理和被代理者实现了相同的接口,包揽了被代理者不适合干的事情,对于外界来说,只要访问代理就可以了,反正它会包办一切。代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。

应用情况:

1.不希望某些类被直接访问。

2.访问之前希望先进行一些预处理。

3.希望对被访问的对象进行内存、权限等方面的控制 


 

posted on 2013-04-12 21:50  雨落天涯  阅读(220)  评论(0编辑  收藏  举报