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類圖: