读书人

设计形式总结:适配器模式、外观模式

发布时间: 2013-01-28 11:49:56 作者: rapoo

设计模式总结:适配器模式、外观模式
适配器模式(Adapter Pattern)
定义:

Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interface.

适配器将一个类的接口转换成客户端所期待的另一种接口,让原本因为接口不匹配而无法在一起工作的两个类能在一起工作。

适配器模式把一个接口或类转换成其他的接口或类;也就是一个包装模式Wrapper:将Adaptee包装成一个Target接口的类。


适配器模式的三个角色:

1)Target,目标角色

即客户端所期望的接口。

2)Adaptee,源角色

是已经存在的,运行良好的类,经过适配器角色的包装,转换为Target

3)Adapter,适配器角色

核心角色。通过继承或关联,来进行转换。


分类:对象适配器

如下图。不仅可以适配Adaptee,还可以适配Adaptee的子类。

类适配器

区别是Adapter继承Adaptee,而非关联。

设计形式总结:适配器模式、外观模式


优点:可以让两个没有任何关系的类在一起运行增加了类的透明性,客户端只知道Target提高了类的复用度提高灵活性;若某天不想用适配器了,删掉适配器即可;或要换Adaptee,更改适配器即可。


使用场景:

用于扩展应用中,是一个补救模式,用来解决接口不相容的问题。

项目一定要遵守依赖倒置原则、里氏替换原则,否则适配器也补救不了!


与其他设计模式的联系:

Adapter可以包装一个Adaptee,也可以同时包装多个Adaptee!此时要注意与“外观模式”的区别:

适配器模式的意图,是改变接口以符合client的期望。外观模式的意图,是提供复杂子系统的一个简化接口,让接口更简单。装饰者模式的意图,是不改变接口,但加入新的行为和责任。



外观模式(Facade Pattern)定义:

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

用法:

1)通过组合,让外观能够访问子系统中所有组件;

2)将组件整合成一个统一的接口


public class Facade{    ComonentA a;    ComonentB b;    ....    public void watchMovie(){        a.on();        b.start();        ...    }        public void endMovie(){        ...        b.stop();        a.off();    }}

优点:简化了复杂的接口,客户端只需与外观交流,而无需知道具体的子系统组件;符合 迪米特法则(最少知识原则)。了解更多……
还将客户从组件的子系统中解耦,例如若组件升级,只需要修改外观代码即可,无需修改客户端代码。



读书人网 >软件开发

热点推荐