现在的位置: 首页 > 综合 > 正文

设计模式总结2——结构型模式

2012年12月20日 ⁄ 综合 ⁄ 共 1078字 ⁄ 字号 评论关闭

结构型模式讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式)。GoF23中设计模式中结构型模式有7中。具体分类如下:

  • 适配器模式

将一个接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作(即让接口不同的类通过适配器后,协同工作)。

 

  • 桥接模式:

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

在解耦方式中,用聚合来代替继承。继承虽然是好东西,但是过渡运用,就会导致类的结构过于复杂,关系太多,难以维护,而更糟糕的是扩展性非常差。如果发现继承体系中,有两个甚至多个方面的变化,那么久解耦这些不同方向的变化,通过对象组合的方式,把两个角色之间的继承关系改为了组合的关系,从而使这两者可以各自独立的变化。找出变化并封装之。

 

  • 组合模式:

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

 

  • 装饰模式:

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

面对变化,如果采用继承方式会产生大量的子类,使子类数目呈爆炸性增长。而事实上,这些子类多半只是为某个对象增加一些职责,此时通过装饰的方式,可以更加灵活、以动态、透明的方式给单个对象添加职责,不需要时,撤销相应的职责。

 

  • 外观模式:

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

信息的隐藏促进了软件的复用,在外观模式中,采用引入一个外观对象,让一个软件中的子系统见的通信和相互依赖关系达到最小,也就为子系统间提供了一个单一而简单的屏障。

 

  • 享元模式:

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

 

  • 代理模式:

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

 

  • 代理模式与外观模式的区别:

代理对象代表一个单一对象而外观对象代表一个子系统;代理的客户端对象无法之间访问目标对象,有代理提供对单独的目标对象的访问控制,而外观的客户对象可以直接访问子系统中的各个对象,但通常由外观对象提供对子系统个元件功能的简化的共同层次的调用。

  • 代理模式与适配器模式的区别:

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

 

总之,外观模式注重简化接口,适配器模式注重转换接口,桥接模式注重分离接口,装饰模式注重在稳定接口的前提下为对象扩展功能。

抱歉!评论已关闭.