日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
巧妙的運用適配器模式,讓你的工作量至少減輕一半

本文轉(zhuǎn)載自微信公眾號「Java極客技術(shù)」,作者鴨血粉絲。轉(zhuǎn)載本文請聯(lián)系Java極客技術(shù)公眾號。

今天我們就一起來聊聊使用超廣的適配器模式!

一、介紹

適配器模式,顧名思義,就是將一個類的接口轉(zhuǎn)換成客戶希望的另一個接口,使接口不兼容的類可以一起工作,也被稱為包裝器模式(Wrapper)。

在適配器模式中,通常通過增加一個新的適配器類來解決接口不兼容的問題,使得原本沒有任何關(guān)系的類可以協(xié)同工作。

從設計的角度看,適配器模式涉及到三個角色:

  • 適配器類:適配器類可以調(diào)用另一個接口,從而實現(xiàn)接口的轉(zhuǎn)換;
  • 被適配類:被適配類定義了一個已經(jīng)存在的接口,這個接口需要適配;
  • 客戶角色:客戶類提出使用具體類的請求;

二、示例

在 java 中,適配器模式有兩種,類適配器和對象適配器,下面我們一起來看看!

2.1、類適配模式

首先,我們創(chuàng)建一個接口Phone,接口的實現(xiàn)類為HuaweiPhone!

 
 
 
 
  1. public interface Phone {
  2.     void productPhone();
  3. }
  4. public class HuaweiPhone implements Phone {
  5.     @Override
  6.     public void productPhone() {
  7.         System.out.println("生產(chǎn)一部華為手機");
  8.     }
  9. }

在創(chuàng)建另一個接口Player,如果Player的實現(xiàn)類想調(diào)用HuaweiPhone中的productPhone方法,該怎么辦呢?

最簡單的方法,就是將productPhone的方式邏輯抄一遍,但是這種方法顯然不高效!

可以通過創(chuàng)建一個適配器ExpensiveAdapter,使之繼承HuaweiPhone,來解決接口轉(zhuǎn)換的問題,如下:

 
 
 
 
  1. public class ExpensiveAdapter extends HuaweiPhone implements Player {
  2.     @Override
  3.     public void action() {
  4.   //調(diào)用HuaweiPhone中的productPhone方法
  5.         productPhone();
  6.         System.out.println("用手機播放音樂");
  7.     }
  8. }

測試類如下:

 
 
 
 
  1. public class AdapterClient {
  2.     public static void main(String[] args) {
  3.         ExpensiveAdapter adapter = new ExpensiveAdapter();
  4.         adapter.action();
  5.     }
  6. }

即可實現(xiàn)接口的轉(zhuǎn)換!

但是這種方法,也有很大的局限性,假如Phone接口的實現(xiàn)類有多個呢?

我們知道,類是無法多繼承的,對象適配模式就派上用場了!

2.2、對象適配模式

同樣的,我們可以對ExpensiveAdapter類進行一定的優(yōu)化,如下:

 
 
 
 
  1. public class ExpensiveAdapter implements Player {
  2.     private Phone phone;
  3.     public ExpensiveAdapter(Phone phone) {
  4.         this.phone = phone;
  5.     }
  6.     @Override
  7.     public void action() {
  8.         //調(diào)用Phone接口中的productPhone方法
  9.         phone.productPhone();
  10.         System.out.println("用手機播放音樂");
  11.     }
  12. }

測試客戶端如下:

 
 
 
 
  1. public class PlayerClient {
  2.     public static void main(String[] args) {
  3.   //對象適配
  4.         ExpensiveAdapter adapter = new ExpensiveAdapter(new HuaweiPhone());
  5.         adapter.action();
  6.     }
  7. }

相比類適配模式,有木有發(fā)現(xiàn)對象適配模式更加靈活~

三、應用

在 jdk 中,適配器設計模式應用也非常廣泛,例如我們熟悉的io包,其中字節(jié)流轉(zhuǎn)字符流,就使用到了適配器模式!

其中,最廣泛的莫過于Spring中的ioc對象依賴關(guān)系,在類A中,通過引入另一個類B 對象,就可以調(diào)用類 B 中的方法了,從而實現(xiàn)方法的協(xié)同工作!

四、總結(jié)

適配器模式,可以讓任何兩個沒有關(guān)聯(lián)的類一起運行,提高了類的復用;例如,現(xiàn)在非常流行的Mybatis-plus持久框架,里面的Service層就是典型的類適配模式,在Service層可以很方便的進行crud調(diào)用,開發(fā)人員基本不需編寫crud的代碼,開發(fā)效率大大提升!

但是,設計時如果過多的使用適配器,會讓系統(tǒng)非常零亂,不易整體進行把握。比如,明明看到調(diào)用的是另一個接口,反而另一個接口又回調(diào)了自身,一個系統(tǒng)如果太多出現(xiàn)這種情況,無異于一場災難。

因此在設計使用的時候,盡可能層次分明,接口名包括方法名,取名的時候應該規(guī)范化定義!

五、參考

1、菜鳥教程 - 適配器模式

2、簡書 - 鍵盤上的麒麟臂 - 淺談Java適配器模式


網(wǎng)站標題:巧妙的運用適配器模式,讓你的工作量至少減輕一半
當前URL:http://www.dlmjj.cn/article/dhheijo.html