文章转载自:https://www.cnblogs.com/eric-fang/p/9122564.html
适配器模式
假如我的手机是typec类型的充电口,但是现在却只有个传统的 MicroUSB
充电线,怎么办?很简单,弄个转换接头,MicroUSB
口转化成 typec
的,问题解决。这就是适配器的应用。
适配器就是个转化适配中间接口,可以将不匹配的两件事整合到一起,把不匹配变得匹配。
通常,适配器有三种:类适配器、对象适配器。
- 类适配器:继承实现,静态定义
- 对象适配器:代理实现,动态组合模式
一、类适配器
以下为代码演示:
传统的 Micro USB 的充电线
package com.cn.adapter.classAdapter;
/**
* 有个传统的Micro USB的充电线
*
* @author cfang
* 2018年6月1日 下午4:13:01
*/
public interface MicroUSB {
void isMicroUSB();
}
手机充电口为 TypeC
package com.cn.adapter.classAdapter;
/**
* 手机充电口为typec
*
* @author cfang
* 2018年6月1日 下午4:14:28
*/
public interface TypeC {
void isTypeC();
}
package com.cn.adapter.classAdapter;
public class TypeCImpl implements TypeC{
@Override
public void isTypeC() {
System.out.println("typec充电口");
}
}
整个适配器 Adapter,将 MicroUSB 转换成 TypeC
package com.cn.adapter.classAdapter;
/**
* 用于将MicroUSB接口转化成tytpec接口
*
* @author cfang
* 2018年6月1日 下午4:46:28
*/
public class Adapter extends TypeCImpl implements MicroUSB{
@Override
public void isMicroUSB() {
isTypeC();
}
}
测试 Main 函数
package com.cn.adapter.classAdapter;
public class App {
public static void main(String[] args) {
MicroUSB microUSB = new Adapter();
microUSB.isMicroUSB();
}
}
二、对象适配器
TypeC 接口、MicroUSB 接口以及实现同上
适配器类
package com.cn.adapter.objectAdapter;
import com.cn.adapter.classAdapter.MicroUSB;
import com.cn.adapter.classAdapter.TypeC;
public class Adapter implements MicroUSB{
private TypeC typeC;
public Adapter(TypeC typeC){
this.typeC = typeC;
}
@Override
public void isMicroUSB() {
typeC.isTypeC();
}
}
测试 Main 函数
package com.cn.adapter.objectAdapter;
import com.cn.adapter.classAdapter.MicroUSB;
import com.cn.adapter.classAdapter.TypeC;
import com.cn.adapter.classAdapter.TypeCImpl;
public class App {
public static void main(String[] args) {
TypeC typeC = new TypeCImpl();
MicroUSB microUSB = new Adapter(typeC);
microUSB.isMicroUSB();
}
}
三、接口适配器
很多时候,还会遇到一种适配器,接口的适配器,很简单,假如有个很大的接口,几十个方法,但是并不是每个实现该接口的都必须得实现所有方法,此时,就可以做个抽象的中间类,实现大接口,方法实现都是空。之后开发,都继承这个抽象类,用哪些方法,就覆写哪些方法。相对简单,代码就不上了。