一、适配器模式的定义
适配器模式(Adapter Pattern)定义:Convert the interface of a class into another clients expect . Adapter lets classes work togeter that couldn't oterwise because of incompatible interaces.(将一个类的借口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。)
适配器模式又叫做变压器模式,也可以叫做包装模式(Wrapper),但是包装模式不止一个(还包括装饰模式)。
适配器模式在生活中还是很常见的,比如我们笔记本上的电源适配器,可以使用在110V~220V之间变化的电源,而笔记本还能正常工作,这也是适配器的一个良好模式的体现。简单地说,适配器模式就是把一个接口或类转换成其他的接口或类。
#Target目标角色
该角色定义把其他类转换为何种借口,也就是我们的期望接口。
#Adaptee源角色
你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在、运行良好的类或对象。
#Adapter适配器角色
适配器模式的核心角色,其他两个角色都是已经存在的,而适配器角色则是需要新建的。适配器通过继承或类关联的方式将源角色转换成目标角色。
二、代码清单
目标角色:
目标角色是一个已经在正式运行的角色,我们不可能去修改角色中的方法,我们能做的就是如何去实现接口中的方法,而且通常情况下,目标角色是一个接口或者是抽象类,一般不会是实现类。
目标角色的实现类:
源角色:
源角色也是已经正在运行的角色(当然,如果非要新建立一个源角色,然后套用适配器模式,那也是没有任何问题的),它是一个正常的类。
适配器角色:
场景类:
三、适配器模式的优点1)适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就成;
2)增加了类的透明性
想想看,我们访问的Target目标角色,但是具体的事先都委托给了源角色,而这些对高层次模块是透明的,也是它不需要关心的;
3)提高了类的复用度
当然了,源角色在原有的系统中还是可以正常使用的,而在目标角色中可以充当新的演员;
4)灵活性更好
当某一天我们不想要适配器的时候,只需要删掉这个适配器就可以了,对其他的代码没有什么影响。
四、适配器模式的使用场景和注意事项
使用场景:当我们需要修改一个已经投产中的接口时,适配器可能是最适合的设计模式。比如进行系统扩展时,需要使用一个已有或新建立的类,但是这个类又不符合系统的接口,这时就可以使用适配器模式。
注意事项:适配器模式最好在详细设计阶段不要考虑它,它不是为了解决还处在开发阶段的问题,二是解决已经投入运行的项目的问题。