[100]技術-適配器模式

什么是適配器模式

現有接口 iA,iB的情況下,我們希望在不修改已有代碼的情況下iA可以使用iB的接口。根據開放封閉原則,我們可以立馬想到增加一個類使iA兼有iB接口的功能。這就是適配器接口的由來,其定義可以為:Adapter pattern works as a bridge between two incompatible interfaces.

如何寫適配器

適配器是在已有兩個不兼容的接口的背景下,以開放封閉原則來編碼代碼形成的一種規范。
我們舉一個場景,其現有代碼:

iA
{
   doA();
}
iB{
    doB();
}
main()
{
  iA a = new Aimpl(); 
  a.doA(); 
}

我們希望在main(){}方法中,a.doA()具有iB.doB()接口的功能。由此我們想到了wrapper 對象把A包裝起來。

AdapterToB implement iA  //至于AdapterToB需不需要實現iB接口不重要,不是適配器模式所規范的
{  
      iB b;
      public void  doA()
      {
             b.doB();
      }
}
//我們只需要添加一個類:AdapterToB 在調用的時候把對象實例替換掉就可以,具體場景中也許A對象實例是通過spring注入的,此時只需要修改配置文件即可。
main()
{
    iA a = new AdatperToB(); 
    a.doA(); 
}

適配器與代理模式區別

談到代理模式與適配器的區別,我們先簡單回顧下代理模式是什么樣的。

public  ProxyA implement A  //運用代理后客戶端訪問接口不變所以需要繼承相同的接口。
{
    RealA a;
    public void do()
   {
        //create A if a is not create
       //dosomething.....
       a.do();
   }
}

看了上面簡單描述我們知道代理模式描述的是A與proxyA的關系,比如A是一個遠程調用我需要代理起來可以額外空盒子。
而適配器模式描述的是解決 iA,iB之間的關系,設計到 iA,iB,AdapterToB三個類之間的關系。

說在后面的話

1.學習東西要帶入場景,比如適配器模式是已有iA,iB兩個接口的情況下,如何使其兼容。
2.如果只有一個接口iA, 你想替換到iA的接口iA實現類不多或者已有的實現不用了,那么直接在iA實現類上修改即可。
比如:

Aimpl1 implement iA
{
   doA()
   {
         XXXXXX Aimpl1 doA
   }
}

3.又比如iA有很多的實現比如Aimp1,Aimpl2,Aimpl3,且代碼中大量引用Aimpl1,Aimpl2,Aimpl3對象。
如果你在新的場景下需要iA接口具有新的功能,又不想修改iA接口(很多原因,比如iA是別的團隊提供的),那么可以使用適配器模式。
然后在新的場景下使用適配器類。

//新的場景
    iA a = new AdatperToB(); 
    a.doA(); 
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容