敏捷軟體開發之結構型設計模式
阿新 • • 發佈:2018-11-24
參考
什麼是結構型設計模式
結構型模式講的是如何將類和物件按照某種佈局組成更大的結構。它分為類結構型模式和物件結構型模式,其中類結構型模式採用繼承機制來組織介面和類,其中物件結構型模式採用組合和聚合來組合物件。由於組合和聚合比繼承的耦合性低,滿足“合成複用原則”,所以物件結構型模式比類結構型模式具有更大的靈活性。
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)通常適用於以下場景。
- 以前開發的系統存在滿足新系統功能需求的類,但其介面同新系統的介面不一致。
- 使用第三方提供的元件,但元件介面定義和自己要求的介面定義不同。