结构型模式(2)

Adapter模式注重转换接口,将不吻合的接口适配对接。

Bridge模式注重分离接口与其实现,支持多维度变化。

Composite模式注重统一接口,将“一对多”的关系转换为“一对一”的关系。

Decorator模式注重稳定接口,在此前提下为对象扩展功能。

Facade模式注重简化接口,简化组件系统与外部客户程序的依赖关系。

Flyweight模式注重保留接口,在内部使用共享技术对对象存储进行优化。

Proxy模式注重假借接口,增加间接层次实现灵活控制。

 

适用性:

一、Adapter:

  1、想使用一个已经存在的类,而它的接口不符合需求

  2、想创建一个可复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不兼容的类)协同工作

  3、(仅适用于对象Adapter)想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

二、Bridge:

  1、你不希望在抽象和它的实现部分之间有一个固定的绑定关系。

         例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。

  2、类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。

  3、对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。

三、Composite:

  1、表示对象的部分-整体层次结构。

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

四、Decorator:

  1、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。

  2、处理那些可以撤销的职责。

  3、当不能采用生成子类的方法进行扩充时。

        一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。

        另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

五、Facade:

  1、当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。

  2、客户程序与抽象类的实现部分之间存在着很大的依赖性,引入facade将这个子系统与客户以及其他的子系统分离,可以提高子系统独立性和可移植性。

  3、当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过Facade进行通讯,从而简化了它们之间的依赖关系。

六、Flyweight:

  1、一个应用程序使用了大量的对象,造成很大的存储开销

  2、完全由于使用大量的对象,造成很大的存储开销

  3、对象的大多数状态都可变为外部状态

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

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

七、Proxy

  1、远程代理(Remote Peoxy)为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

  2、虚拟代理(Virtual Proxy)根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。

  3、安全代理(Protection Proxy)控制真实对象访问时的权限。

  4、智能指引(Smart Reference)当调用真实的对象时,代理处理另外一些事。

 

参考资料:

《设计模式:可复用面向对象软件的基础》

《大话设计模式》

《C#面向对象设计模式纵横谈》

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值