適配器模式把一個類的接口變換成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個類能夠在一起工作。
優點:適配器可以在不改變原有代碼的情況下讓原本不兼容的類無間合作
缺點:過多的使用適配器,會讓系統變得凌亂
適配器模式分爲類適配器和對象適配器模式!!
一:類適配器
類的適配器模式把適配的類的API轉換成爲目標類的API。
/**
* 類適配模式
* @author Xul
*
*/
public class AdapterModel {
public static void main(String[] args) {
Target target = new Adapter();
target.zuofan();
}
}
/**
* 目標接口
* 做飯
*/
interface Target{
public void zuofan();
}
/**
* 需要被適配的接口
*/
class Adaptee{
public void maicai(){
System.out.println("買菜!!!");
}
public void shaoshui(){
System.out.println("燒水!!!");
}
public void zhufan(){
System.out.println("煮飯!!!");
}
public void chaocai(){
System.out.println("炒菜!!!");
}
}
/**
* 適配器
*/
class Adapter extends Adaptee implements Target{
@Override
public void zuofan() {
this.maicai();
this.shaoshui();
this.zhufan();
this.chaocai();
}
}
二:對象適配器
對象的適配器模式使用委派關係連接到Adaptee類,把被適配的類的API轉換成爲目標類的API
/**
* 對象適配器模式
*/
public class ObjAdapterModel {
public static void main(String[] args) {
ObjAdaptee adaptee = new ObjAdaptee();
ObjTarget objTarget = new ObjAdapter(adaptee);
objTarget.zuofan();
}
}
/**
* 目標接口
* 做飯
*/
interface ObjTarget{
public void zuofan();
}
/**
* 需要被適配的接口
*/
class ObjAdaptee{
public void maicai(){
System.out.println("買菜!!!");
}
public void shaoshui(){
System.out.println("燒水!!!");
}
public void zhufan(){
System.out.println("煮飯!!!");
}
public void chaocai(){
System.out.println("炒菜!!!");
}
}
/**
* 適配器
*/
class ObjAdapter implements ObjTarget{
ObjAdaptee objAdaptee ;
public ObjAdapter(ObjAdaptee objAdaptee) {
this.objAdaptee = objAdaptee;
}
@Override
public void zuofan() {
objAdaptee.maicai();
objAdaptee.shaoshui();
objAdaptee.zhufan();
objAdaptee.chaocai();
}
}