Java设计模式之适配器模式
适配器模式包括类适配器和对象适配器,下面先看类适配器:
类适配器
public class Adaptee {
public void adapteeRequest(){
System.out.println("被适配者的方法");
}
}
public interface Target {
void request();
}
//类适配器继承被适配者,并且实现Target接口
public class Adapter extends Adaptee implements Target {
@Override
public void request() {
//Target接口里面的方法通过Adapter适配器适配给了被适配者
super.adapteeRequest();
}
}
//具体实现类
public class ConcreteTarget implements Target {
@Override
public void request() {
System.out.println("Concrete目标方法");
}
}
//调用
public static void main(String [] a){
Target target=new ConcreteTarget();
target.request();
Target adapterTarget=new Adapter();
adapterTarget.request();
}
//结果
Concrete目标方法
被适配者的方法
此时UML的类图为:
对象适配器
下面看看对象适配器,只需修改Adapter类,其他类不需要修改。
public class Adaptee {
public void adapteeRequest(){
System.out.println("被适配者的方法");
}
}
public interface Target {
void request();
}
public class Adapter implements Target {
private Adaptee adaptee=new Adaptee();
@Override
public void request() {
//委托给Adaptee实现
adaptee.adapteeRequest();
}
}
//具体实现类
public class ConcreteTarget implements Target {
@Override
public void request() {
System.out.println("Concrete目标方法");
}
}
//调用
public static void main(String [] a){
Target target=new ConcreteTarget();
target.request();
Target adapterTarget=new Adapter();
adapterTarget.request();
}
//结果
Concrete目标方法
被适配者的方法
看看此时UML的类图:
下面来看看家里的电源适配器,用代码如何实现:
//首先创建一个类,输出220V
public class AC220 {
public int outputAC220V(){
int output=220;
System.out.println("输出交流电"+output+"V");
return output;
}
}
//新建接口 输出5V
public interface DC5 {
int outputDC5V();
}
//实现接口DC5
public class PowerAdapter implements DC5{
AC220 ac220=new AC220();
@Override
public int outputDC5V() {
int adapterInput=ac220.outputAC220V();
int adapterOutput=adapterInput/44;
System.out.println("使用PowerAdapter将"+adapterInput+"V转换为"+adapterOutput+"V");
return adapterOutput;
}
}
//调用
DC5 dc5=new PowerAdapter();
dc5.outputDC5V();
//结果
输出交流电220V
使用PowerAdapter将220V转换为5V
看看此时的UML类图: