一、核心作用
将一个类的接口转换为客户希望的接口
使原本接口不兼容而不能一起工作的类可以在一起工作
二、常见应用场景:
1、java.io.InputStreamReader(InputStream)
2、java.io.OutputStreamWriter(OutputStream)
三、适配器模式角色
• 目标角色(target):这是客户期待的接口,目标可以是具体的或抽象类,也可以是接口
• 适配器角色(adpater):将已有接口转换为目标接口
• 被适配者角色(adpatee):已有接口,但是与客户所期待的接口不兼容
四、适配器分类
1、类适配器模式:
2、对象适配器模式
五、代码示例:
一、类适配器模式:
目标对象:
package com.hezeu.adapter;
/**
* @Classname Target
* @Description 目标接口
* @Date 2020/2/22 下午 03:52
* @Created by 朱进博 [email protected]
*/
public interface Target {
void handleReq();
}
类适配器:
package com.hezeu.adapter;
/**
* @Classname Adapter
* @Description 适配器(类适配器)
* @Date 2020/2/22 下午 03:57
* @Created by 朱进博 [email protected]
*/
public class Adapter extends Adaptee implements Target{
@Override
public void handleReq() {
super.request();
}
}
被适配者:
package com.hezeu.adapter;
/**
* @Classname Adaptee
* @Description 被适配类
* @Date 2020/2/22 下午 03:54
* @Created by 朱进博 [email protected]
*/
public class Adaptee {
public void request(){
System.out.println("可以完成客户请求的需要的功能!");
}
}
二、对象适配器模式:
对象适配器:
package com.hezeu.adapter;
/**
* @Classname Adapter02
* @Description 适配器(对象适配器)
* @Date 2020/2/22 下午 04:10
* @Created by 朱进博 [email protected]
*/
public class Adapter02 implements Target{
private Adaptee adaptee;
public Adapter02(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void handleReq() {
adaptee.request();
}
}
六、类适配器模式和对象适配器模式对比
优点:
类适配器模式:由于adapter类是适配者adaptee类的子类,因此可以在适配器中置换一些适配者的方法,使适配器的灵活性更强
对象适配器模式:一个对象适配器可以把多个不同的适配者adaptee适配到一个目标,也就是说,同一个适配器可以将适配者类和他的子类都适配到目标接口
缺点:
**类适配器:**不支持多继承,适配者类只有一个
对象适配器:想要修改适配者类的一个或多个方法,只好创建一个继承与适配者类的子类,把适配者方法置换掉,然后把适配者的子类当作真正的适配者进行适配,实现过程较为复杂
七、使用适配器模式的优缺点
优点:
- 复用性:系统需要使用已经存在的类,功能符合系统要求,但是类的接口不符合系统要求,通过适配器可以解决不兼容问题,使这些功能得到复用
- 扩展性:适配器使得系统多了一个方式扩展系统的功能
- 耦合性:一定程度上解耦
缺点:
- 过多的使用适配器,增加系统的理解成度
水平有限,如有错漏,还请不吝赐教