適配器模式(Adapter Pattern)
#Adapter模式也叫適配器模式,是建構型模式之一,透過Adapter模式可以改變已有類別(或外部類別)的介面形式。
適配器模式應用場景
在大規模的系統開發過程中,我們常常碰到諸如以下這些情況:
我們需要實現某一些功能,這些功能已有還不太成熟的一個或多個外部組件,如果我們自己重新開發這些功能會花費大量時間;所以很多情況下會選擇先暫時使用外部組件,以後再考慮隨時替換。但這樣一來,會帶來一個問題,隨著對外部元件庫的替換,可能需要對引用該外部元件的原始程式碼進行大面積的修改,因此也極可能引入新的問題等等。如何最大限度的降低修改面呢? Adapter模式就是針對這種類似需求而提出來的。 Adapter模式透過定義一個新的介面(對要實現的功能加以抽象),和一個實作該介面的Adapter(適配器)類別來透明地呼叫外部元件。這樣替換外部元件時,最多只要修改幾個Adapter類別就可以了,其他原始碼就不會受到影響。
php實例
假設我們有一個文章類別已經完成了文章的清單及詳細資訊展示工作:
<?php class article{ //文章列表获取方法 public function getLIst(){ echo '获取文章列表'; } //根据文章id获取文章的标题和内容 public function getInfo($id){ echo '根据文章id获取文章的标题和内容'; } } $art = new article(); $art->getInfo(1);
由於專案的需要,現在需要這樣的一個功能。取得文章細節時還需要取得文章的建立時間,並需要更新文章的閱讀次數。
如果不使用適配器模式我們首先想到的時修改article類別的原始程式碼增加這樣的功能。之所以這樣想是因為上面的範例程式碼很簡單,如果他是上千行呢?如果getInfo()程式碼非常複雜呢?
使用適配器模式來解決這一切吧!
class articleAdapter{ public $_artObj; public function __construct($artObj){ $this->_artObj = $artObj; } public function getInfo($id){ $this->_artObj->getInfo($id); } public function getInfoAndUpdate($id){ //利用$this->_artObj查询符合要求的文章数据并更新浏览次数 echo '$this->_artObj查询符合要求的文章数据并更新浏览次数'; } } $art = new articleAdapter(new article()); $art->getInfo(12); $art->getInfoAndUpdate(12);
為什麼不使用繼承?
物件適配器:不是透過繼承的方式,而是透過物件組合的方式來處理的,我們只要學過OO的設計原則的都知道,組合相比繼承是推薦的方式。
類別適配器:透過繼承的方式來實現,將舊系統的方法進行封裝。物件適配器在進行適配器之間的轉換過程中,無疑類別適配器也能完成,但是依賴性會加大,並且隨著適配要求的靈活性,可能透過繼承膨脹的難以控制。
一般來說類別適配器的靈活性較差,物件適配器較靈活,是我們推薦的方式,可以透過依賴注入的方式,或是配置的方式來做。類別適配器需要繼承自要適配的舊系統的類,無疑這不是一個好的方法。
以上是適配器模式是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!