定义
- 将某个类的接口转换成客户期望的另一个接口表示,使因为接口不兼容导致不能在一起工作的某些类能在一起工作。
- 别名为包装器
- 根据适配器类与适配者的关系的不同,可分为对象适配器和类适配器
- 在对象适配器中,适配器与适配者是 关联关系
- 在类适配器中,适配器与适配者是 继承(或实现)关系
例子
就拿日本电饭煲的例子进行说明,日本电饭煲接口标准是110v电压,而中国标准电压接口是220v,所以想要在中国用日本电饭煲,就需要一个电源转换器
/**日本11v 电源接口
* Created by merbng on 2020/3/14.
*/
public interface JP110VInterface {
void connect();
}
/**
* 日本110v 电源
* Created by merbng on 2020/3/14.
*/
public class JP110VInterfaceImpl implements JP110VInterface {
@Override
public void connect() {
Log.e("", "日本110V电源开始工作...");
}
}
/**中国220v 电源接口
* Created by merbng on 2020/3/14.
*/
public interface China220VInterface {
public void connect();
}
/**
* 中国220v 电源
* Created by merbng on 2020/3/14.
*/
public class China220VInterfaceImpl implements China220VInterface {
@Override
public void connect() {
Log.e("==设计模式:适配器模式==", "中国220V电源开始工作...");
}
}
/**
* 电饭煲
* Created by merbng on 2020/3/14.
*/
public class ElectricCooker {
private JP110VInterface jp110VInterface;
public ElectricCooker(JP110VInterface jp110VInterface) {
this.jp110VInterface = jp110VInterface;
}
public void work() {
jp110VInterface.connect();
Log.e("==设计模式:适配器模式==","电饭煲开始工作...");
}
}
/**
* Created by merbng on 2020/3/14.
*/
public class PowerAdapter implements JP110VInterface {
China220VInterface china220VInterface;
public PowerAdapter(China220VInterface china220VInterface) {
this.china220VInterface = china220VInterface;
}
@Override
public void connect() {
china220VInterface.connect();
}
}
public class AdapterModeTest extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
China220VInterface china220VInterface = new China220VInterfaceImpl();
PowerAdapter adapter = new PowerAdapter(china220VInterface);
ElectricCooker electricCooker = new ElectricCooker(adapter);
electricCooker.work();
}
}
总结
主要优点:
- 1.将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无需修改原有结构。
- 2.增加了类的透明性和
复用性
,将具体的业务实现过程封装在适配者类中,对于客户端而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。 -
灵活性
和扩展性
都非常好,通过使用配置文件,可以很方便的更换适配器,也可在不修改原有代码的基础上增加新的适配器,完全符合“开闭原则”
-
缺点:
过多的使用适配器会让系统显得过于凌乱,如果不是很远必要,可以不使用适配器而是直接对系统进行重构
参考链接:
网友评论