成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

巧妙的運用適配器模式,讓你的工作量至少減輕一半

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

[[412974]]

本文轉載自微信公眾號「Java極客技術」,作者鴨血粉絲。轉載本文請聯系Java極客技術公眾號。

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

一、介紹

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

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

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

  • 適配器類:適配器類可以調用另一個接口,從而實現接口的轉換;
  • 被適配類:被適配類定義了一個已經存在的接口,這個接口需要適配;
  • 客戶角色:客戶類提出使用具體類的請求;

二、示例

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

2.1、類適配模式

首先,我們創建一個接口Phone,接口的實現類為HuaweiPhone!

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

在創建另一個接口Player,如果Player的實現類想調用HuaweiPhone中的productPhone方法,該怎么辦呢?

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

可以通過創建一個適配器ExpensiveAdapter,使之繼承HuaweiPhone,來解決接口轉換的問題,如下:

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

測試類如下:

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

即可實現接口的轉換!

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

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

2.2、對象適配模式

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

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

測試客戶端如下:

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

相比類適配模式,有木有發現對象適配模式更加靈活~

三、應用

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

 

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

四、總結

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

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

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

五、參考

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

 

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

 

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2024-10-11 11:21:39

適配器模式系統

2022-02-18 17:21:29

適配器模式客戶端

2022-02-13 23:33:24

設計模式Java

2020-10-25 08:56:21

適配器模式

2023-09-06 13:20:00

適配器模式兼容性

2012-08-02 10:46:34

JavaAdapter模式

2024-02-22 12:13:49

適配器模式代碼

2013-11-26 16:39:21

Android設計模式

2021-02-18 08:39:28

設計模式場景

2012-05-16 17:22:11

Java設計模式

2022-05-29 22:55:00

適配器設計模式

2021-02-16 08:16:09

適配器模式MybatisJava

2021-07-12 07:08:54

責任鏈模式對象

2009-11-18 18:08:20

PHP適配器模式

2012-09-19 15:29:26

Worklight適配器

2025-06-05 01:45:00

Spring框架適配器

2024-07-31 10:41:16

C#設計模式

2024-04-10 12:27:43

Python設計模式開發

2009-03-09 12:53:09

服務器虛擬化IDC虛擬機

2022-12-12 09:20:59

適配器模式接口
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产97在线 | 日韩 | 91亚洲国产成人精品一区二三 | 夜夜骑综合 | 日韩一区二区三区av | 亚洲黄色片免费观看 | 日韩中文字幕在线观看视频 | 久久久99精品免费观看 | 天天草草草| 国产免费自拍 | 毛片一区二区 | 黄色一级免费观看 | 亚洲天堂久久新 | 极品久久 | 亚洲一区二区三区在线视频 | www.成人.com| 久久精品91久久久久久再现 | 国产精品亚洲视频 | 一区二区三区高清 | 国产精品久久久久久妇女6080 | 久久久久久亚洲精品 | av天天干| 狠狠综合久久av一区二区小说 | 中文字幕av一区 | 中文在线日韩 | 在线观看国产视频 | 91国在线视频 | 久久涩涩 | 亚洲欧美一区在线 | 伊人影院在线观看 | 亚洲欧美日韩国产综合 | 日韩在线中文 | 国产美女一区二区 | 欧美一区中文字幕 | 男女视频网站 | 欧美一区二区 | 国产成人精品一区二区三区网站观看 | 亚洲高清免费视频 | 色网站在线 | 免费观看av | 男女性毛片 | 国产成人高清视频 |