国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

適配器模式是什么?

2024-05-04 21:50:59
字體:
來源:轉載
供稿:網友

適配器模式 (Adapter Pattern)

Adapter模式也叫適配器模式,是構造型模式之一,通過Adapter模式可以改變已有類(或外部類)的接口形式。

適配器模式應用場景

在大規模的系統開發過程中,我們常常碰到諸如以下這些情況:

我們需要實現某些功能,這些功能已有還不太成熟的一個或多個外部組件,如果我們自己重新開發這些功能會花費大量時間;所以很多情況下會選擇先暫時使用外部組件,以后再考慮隨時替換。但這樣一來,會帶來一個問題,隨著對外部組件庫的替換,可能需要對引用該外部組件的源代碼進行大面積的修改,因此也極可能引入新的問題等等。如何最大限度的降低修改面呢?Adapter模式就是針對這種類似需求而提出來的。Adapter模式通過定義一個新的接口(對要實現的功能加以抽象),和一個實現該接口的Adapter(適配器)類來透明地調用外部組件。這樣替換外部組件時,最多只要修改幾個Adapter類就可以了,其他源代碼都不會受到影響。

php實例

假設我們有一個文章類已經完成了文章的列表及詳細信息展示工作:

  1. <?php 
  2.  
  3. class article{ 
  4.  
  5. //文章列表獲取方法 
  6.  
  7. public function getLIst(){ 
  8.  
  9. echo '獲取文章列表'
  10.  
  11.  
  12. //根據文章id獲取文章的標題和內容 
  13.  
  14. public function getInfo($id){ 
  15.  
  16. echo '根據文章id獲取文章的標題和內容'
  17.  
  18.  
  19.  
  20. $art = new article(); 
  21.  
  22. $art->getInfo(1); 

由于項目的需要,現在需要這樣的一個功能。獲取文章細節時還需要獲取文章的創建時間,并需要更新文章的閱讀次數。

如果不使用適配器模式我們首先想到的時修改article類的源代碼增加這樣的功能。之所以這樣想是因為上面的例子代碼很簡單,如果他是上千行呢?如果getInfo()代碼非常復雜呢?

使用適配器模式來解決這一切吧!

  1. class articleAdapter{ 
  2.  
  3. public $_artObj
  4.  
  5. public function __construct($artObj){ 
  6.  
  7. $this->_artObj = $artObj
  8.  
  9.  
  10. public function getInfo($id){ 
  11.  
  12. $this->_artObj->getInfo($id); 
  13.  
  14.  
  15. public function getInfoAndUpdate($id){ 
  16.  
  17. //利用$this->_artObj查詢符合要求的文章數據并更新瀏覽次數 
  18.  
  19. echo '$this->_artObj查詢符合要求的文章數據并更新瀏覽次數'
  20.  
  21.  
  22.  
  23. $art = new articleAdapter(new article()); 
  24.  
  25. $art->getInfo(12); 
  26.  
  27. $art->getInfoAndUpdate(12); 

為什么不使用繼承?

對象適配器:不是通過繼承的方式,而是通過對象組合的方式來進行處理的,我們只要學過OO的設計原則的都知道,組合相比繼承是推薦的方式。

類適配器:通過繼承的方式來實現,將舊系統的方法進行封裝。對象適配器在進行適配器之間的轉換過程中,無疑類適配器也能完成,但是依賴性會加大,并且隨著適配要求的靈活性,可能通過繼承膨脹的難以控制。

一般來說類適配器的靈活性較差,對象適配器較靈活,是我們推薦的方式,可以通過依賴注入的方式,或者是配置的方式來做。類適配器需要繼承自要適配的舊系統的類,無疑這不是一個好的辦法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘洛县| 周至县| 大渡口区| 穆棱市| 醴陵市| 石家庄市| 宁国市| 卓尼县| 寻甸| 益阳市| 德州市| 犍为县| 洛隆县| 丰台区| 孟村| 陵川县| 普兰县| 沾化县| 宁陕县| 汨罗市| 晋宁县| 隆昌县| 扎赉特旗| 北安市| 勐海县| 贵定县| 安庆市| 福建省| 龙里县| 镇安县| 彝良县| 柯坪县| 五峰| 泸水县| 资溪县| 南投县| 大关县| 泽普县| 蓝田县| 布尔津县| 静安区|