定义:
适配器模式是将一个类的接口变换成客户端所期待的另一种接口,从而使原本因为接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器在生活中还是很常见的,下面就是一个其中一种:电源适配器,目的是将220V电压输出成12V
就以电源适配器一个适配器模式的例子,我们生活电压是220V的,现在需要输出12V电压,通过电源适配器完成将220V转换成12V的作用。
220V电压类V220:
class V220 {
void export220(){
System.out.println("输出电压220V");
}
}
我们期待的12V接口
interface IV12 {
//输出12V
void export12();
}
适配器Adapter继承V220
同时又实现IV12
接口
class VAdapter extends V220 implements IV12 {
@Override
public void export12() {
//将220V转换成12V输出
System.out.println("输出12V电压");
}
}
执行测试:
public static void main(String[] args){
IV12 iv12 = new VAdapter();
iv12.export12();
}
输出结果:
输出12V电压
这样就通过适配器Adapter将原本220V的电压输出成我们期望的12V电压了。
适配器模式通用写法
-
Target 目标角色
是我们期望的接口,例子中的IV12
接口 -
Adaptee 源角色
已经存在的类或者对象,需要把它转换成目标角色。例子中的V220
对象 -
Adapter 适配器对象
通过继承或实现的方式将源角色(Adaptee)转换成目标角色(Target)
目标角色Target:
interface Target {
//目标角色自己的方法
void targetMethod();
}
源角色Adaptee:
class Adaptee {
public void adapteeMethod(){
System.out.println("原方法");
}
}
适配器Adapter
class Adapter extends Adaptee implements Target {
@Override
public void targetMethod() {
adapteeMethod();
}
}
目标角色的实现类ConcreteTarget
class ConcreteTarget implements Target {
@Override
public void targetMethod() {
System.out.println("目标方法");
}
}
测试代码:
class ComTest {
public static void main(String[] args){
//原有的业务
Target target = new ConcreteTarget();
target.targetMethod();
//增加适配器
target = new Adapter();
target.targetMethod();
}
}
优点
- 可以让两个没有任何关系的类在一起运行
- 增加了类的透明性
- 提高了类的复用度
- 灵活性高
参考:设计模式之禅
正义啊 发布了82 篇原创文章 · 获赞 16 · 访问量 3万+ 私信 关注