结构型模式简介

结构型模式简介

    结构型模式涉及到如何组合类和对象以获得更大的结构。结构型类模式采用继承机制来组合接口或实现;结构型对象模式描述如何对一组对象进行组合从而实现新功能的一些方法。

一、适配器,ADAPTER,类对象结构型模式

    将一个类的接口转换成客户希望的另外一个接口。

适用性:

系统需要使用现有的类,而此类的接口不符合系统的需要。

想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。

(对对象适配器而言)在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。对象适配器可以适配它的父类接口。

    C++中,用公共方式继承接口,用私有方法继承接口的实现。

    与Bridge类似,但Bridge目的是将接口与实现分离,从而可以独立的改变,而Adapter是改变一个已有对象的接口。Decorator增强了其它对象的功能而同时不改变它的接口,所以比ADAPTER透明性好,其支持递归。Proxy在不改变它的接口的条件下,为另一个对象定义了一个代理。

二、BRIDGE,桥接,对象结构型模式

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

维护一个实现器的指针imp。一般,Implementor接口仅提供基本操作,而Abstraction定义了基于这些操作的较高层次的操作。

适用性

1.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。

2.设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。

3.一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。

4.虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。

    可以用Abstract Factory来创建和配置一个特定的Bridge模式。Adapter通常在系统设计完成后使用,而Bridge则在系统开始时就使用。

三、COMPOSITE,组合,对象结构型模式

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

适合性:

1.你想表示对象的部分-整体层次结构

2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

    当装饰和组合一起使用时,它们通常有一个公共的父类。

四、装饰,DECORATOR,对象结构型模式

    动态地给一个对象添加一些额外的职责。

Decorator维护一个Component对象的指针,并定义一个与Component接口一致的接口。

为了保证接口的一致性,组件和装饰碧血一个公共的Component父类。

适用性

1.需要扩展一个类的功能,或给一个类增加附加责任。  

2.需要动态地给一个对象增加功能,这些功能可以再动态地撤销。   

3.需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。

装饰改变职责,适配器改变接口,策略改变内核。

五、FACADE,外观,对象结构型模式

定义一个统一的接口来方便子系统的操作。

1、为一个复杂子系统提供一个简单接口;

2、提高子系统的独立性;

3、在层次化结构中,可以使用Facade模式定义系统中每一层的入口。

Mediator的目的是对同事之间的任意通讯进行抽象,Facade模式仅对子系统对象的接口进行抽象。

六、FLYWEIGHT,享元模式,对象结构型模式

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

一个应用程序使用了大量的对象,

完全有余使用了大量的对象,造成了很大的存储开销。

对象的大多数状态都可以变为外部状态。

如果删除对象的外部状态那么可以用相对较少的共享对象取代很多组对象。

应用程序不依赖于对象标识,由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。

最好用Flyweight实现State,Strategy对象。

七、代理,PROXY,对象结构型模式

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

代理与Subject具有相同的接口。

decorator与proxy相似,但前者目的是添加功能,后者是控制对对象的访问。

发布了81 篇原创文章 · 获赞 17 · 访问量 6003

猜你喜欢

转载自blog.csdn.net/hopegrace/article/details/103894573