设计模式之适配器模式
将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
Target目标角色:定义把其他类转换为何种接口,也就是我们的期望接口
Adaptee源角色:是已经存在的、运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新、靓丽的角色。
Adapter适配器角色:把源角色转换为目标角色。(通过继承或是类关联的方式)
一、类适配器模式
java是单继承机制,所以类适配器需要继承src类,这就要求target类必须是接口,有一定的局限性
src 类的方法在 Adapter 中都会暴露出来,也增加了使用的成本 。
由于其继承了 src 类,所以它可以根据需求重写 src 类的方法,使得 Adapter 的灵活性增强了 。
二、对象适配器模式(常用)
只是将adapter类作修改,不是继承src类,而是持有src类的实例,以解决兼容性问题。
三、接口适配器模式
当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),
那么该抽象类的子类可以有选择地覆盖父类的某些方法来实现需求。
四、SpringMVC HandlerAdapter源码分析
优点:
适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就成。
增加了类的透明性:我们访问的Target目标角色,具体的实现都委托给了源角色。
提高了类的复用度:源角色在原有的系统中还是可以正常使用,而在目标角色中也可以充当新的演员
灵活性非常好:不想要适配器,删除掉这个适配器就可以了,其他的代码都不用修改