适配器模式:
OO适配器:将一个接口转换成另一个接口,以符合客户的期望。
客户使用适配器的过程如下:
1.客户通过目标接口调用适配器的方法对适配器发出请求。
2.适配器使用被适配器接口把请求转换成被适配器的一个或多个调用接口。
3.客户接收到调用的结构,但并未察觉这一切是适配器在起转换作用。
在新旧并存的系统中,可以创建双向的适配器,支持两边的接口。
定义适配器模式:
将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
如果在一段时间之后,我们想要改变接口,适配器可以将改变的部分封装起来,客户就不必为了应对不同的接口而每次跟着修改了。
被适配者的任何子类,都可以搭配着适配器使用。
适配器包括类适配器和对象适配器:
前者需用在多重继承的语言中,所以java就用不到了,在此提过。分别使用两种不同的适配方法,分别是继承和组合。
对象适配器:使用组合,不仅可以适配某个类,也可以适配该类的任何子类。更有弹性。
类适配器:只能够采用某个特定的被适配类,但不需要重新实现整个被适配者。必要的时候甚至可以覆盖被适配类的方法。效率稍高。
适配器和装饰者的异同点:
1.装饰者的工作全部都是和“责任”相关的,当事情涉及到装饰者,就表示有一些新的行为或责任要加入设计中。
适配器则是转换接口。
一个小例子:
外观模式:
外观模式:
它将一个或数个类的复杂的一切都隐藏在背后,只显露一个干净美好的外观。让接口更简单。
外观模式没有“封装”子系统的类,只是提供了简化的接口。
外观模式和适配器模式意图的区别:
外观模式提供子系统一个简化的接口,而适配器模式“改变”接口从而符合客户的期望。
外观模式定义:
外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
要点:
1.但需要一个现有的类而他的接口并不符合要求时,需使用适配器。
2.当需要简化统一一个很大的接口或者一群接口时,使用外观。
3.适配器改变接口符合客户需求。
4.外观让客户从复杂的子系统中解耦。
5.适配器的复杂程度受目标接口的大小和负责度而定。
6.实现一个外观,需要将子系统组合进外观中,再将工作委托给子系统。
7.子系统可以实现多个外观。
8.适配器将一个对象包装起来,以改变其接口。
外观将一群对象包装起来,以简化其接口。
装饰者将一个对象包装起来,以增加新的行为和责任。