1. 程式人生 > >敏捷軟體開發之結構型設計模式

敏捷軟體開發之結構型設計模式

參考

什麼是結構型設計模式

結構型模式講的是如何將類和物件按照某種佈局組成更大的結構。它分為類結構型模式和物件結構型模式,其中類結構型模式採用繼承機制來組織介面和類,其中物件結構型模式採用組合和聚合來組合物件。由於組合和聚合比繼承的耦合性低,滿足“合成複用原則”,所以物件結構型模式比類結構型模式具有更大的靈活性。

1.介面卡設計模式(Adapter模式)

在現實生活中有很多類似的例子,如用直流電的膝上型電腦接交流電源時需要一個電源介面卡,用計算機訪問照相機的 SD 記憶體卡時需要一個讀卡器等。

為什麼需要介面卡設計模式?

在軟體設計中也可能出現:需要開發的具有某種業務功能的元件在現有的元件庫中已經存在,但它們與當前系統的介面規範不相容,如果重新開發這些元件成本又很高,這時用介面卡模式能很好地解決這些問題。

什麼是介面卡設計模式?

介面卡模式(Adapter)包含以下主要角色。

  • 目標(Target)介面:當前系統業務所期待的介面,它可以是抽象類或介面。
  • 適配者(Adaptee)類:它是被訪問和適配的現存元件庫中的元件介面。
  • 介面卡(Adapter)類:它是一個轉換器,通過繼承或引用適配者的物件,把適配者介面轉換成目標介面,讓客戶按目標介面的格式訪問適配者。

即現在想要在 目標介面 中呼叫 適配者類 中的某些方法,所以定義一個 介面卡類 繼承 適配者類,實現目標介面

分類

介面卡模式分為類結構型模式和物件結構型模式兩種,前者類之間的耦合度比後者高,且要求程式設計師瞭解現有元件庫中的相關元件的內部結構,所以應用相對較少些。

例項

例項一:使用類結構型模式

第一步:首先需要一個適配者類(已經存在的)
class Adaptee{
    
    public function usedMethod(){
        echo "this is Adaptee method";
    }
}
第二步:現在想要開發一個元件(源系統中存在,但是不符合規範)
interface Target{
    public function request();
}
第三步:定義一個介面卡類
class Adapter extends Adaptee implements Target{
    public function request(){
        $this->usedMethod();
    }
}
第四步:使用
$adapter = new Adapter();
$adapter->request();

例項二:使用物件結構型模式

前兩個條件與上面相同

第三步:定義一個介面卡類
class Adapter implements Target{
    public $adaptee;
    
    public function __construct(Adaptee $adaptee){
        $this->adaptee = $adaptee;
    } 
    
    public function request(){
        $this->adaptee->usedMethod();
    }
}
第四步:使用
$adapter = new Adapter();
$adapter->request(new Adaptee());

模式的應用場景

介面卡模式(Adapter)通常適用於以下場景。

  • 以前開發的系統存在滿足新系統功能需求的類,但其介面同新系統的介面不一致。
  • 使用第三方提供的元件,但元件介面定義和自己要求的介面定義不同。