文章目录
1. 什么是适配器模式
适配器模式就是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能再一起工作的那些类现在可以一起工作
2. 适配器模式的结构
2.1. 目标(Target)
目标是一个接口,该接口是客户想使用的接口
2.2. 被适配者(Adaptee)
被适配者是一个已经存在的接口或抽象类,这个接口或抽象类需要适配
2.3. 适配器(Adapter)
适配器是一个类,该类实现了目标接口并包含有被适配者的引用,即适配器的职责是对被适配器者接口(或抽象类)与目标接口进行适配。
3. 类图
4. 代码描述
假设用户家里有一台洗衣机,使用交流电,现在用户买了一台录音机,录音机使用直流电。由于供电系统供给用户家里的是交流电,所以,用户将交流电转换为直流电供录音机使用
4.1. 目标
目标就是用户想使用的接口,这里就是使用直流电
public interface DirectCurrent {
public String giveDirectCurrent();
}
4.2. 被适配者
被适配者就是一个已经存在的接口或者抽象类,这个接口或者抽象类需要被适配。这里就是指用户现在使用的交流电
package TestAdopter;
public interface AlternateCurrent {
public String giveAlternateCurrent();
}
4.3. 适配器
适配器是一个实现了目标接口并且包含有被适配者的引用的类,是适配器模式中的核心。这里适配器的功能就是把交流电转换成直流电。
public class ElectricAdapter implements DirectCurrent {
AlternateCurrent out;
ElectricAdapter(AlternateCurrent out) {
this.out = out;
}
public String giveDirectCurrent() {
String m=out.giveAlternateCurrent();
StringBuffer str=new StringBuffer(m);
//将交流电转换成直流电
for(int i=0;i<str.length();i++){
if(str.charAt(i)=='0'){
str.setCharAt(i,'1');
}
}
m=new String(str);
return m;
}
}
4.4. 适配器模式的使用
public class Application {
public static void main(String[] args) {
AlternateCurrent aElectric =new PowerCompany();
Wash wash=new Wash();
wash.turnOn(aElectric);
Recorder recorder = new Recorder();
DirectCurrent directCurrent=new ElectricAdapter(aElectric);
recorder.turnOn(directCurrent);
}
}
class PowerCompany implements AlternateCurrent{
public String giveAlternateCurrent() {
return "101010101010101010";
}
}
class Wash{
public void turnOn(AlternateCurrent a){
System.out.println(a.giveAlternateCurrent());
System.out.println("洗衣机洗衣服");
}
}
class Recorder{
public void turnOn(DirectCurrent d){
System.out.println(d.giveDirectCurrent());
System.out.println("录音机录音");
}
}
运行结果:
101010101010101010
洗衣机洗衣服
111111111111111111
录音机录音