橋接模式

定義:java

  將抽象部分與它的實現部分分離,使他們均可以獨立的變化。編程

  這裏的抽象和實現分離是指把實現的多種方式獨立出來,讓他們各自變化;實現系統可能有多角度分類,每一種分類都有可能變化,把這種多角度分離出來讓它們獨立變化,減小它們的耦合,這就是橋接模式。this

  好比手機這個抽象,它的實現既能夠按照品牌分類,也能夠按照軟件分類;品牌和軟件各自又都會變化(增長品牌,增長軟件等),橋接模式核心意圖就是把這些實現獨立出來。spa

 

結構圖: 設計

 

代碼(手機有軟件分類和品牌分類兩個維度)code

 //抽象Abstraction(手機品牌抽象)對象

class PhoneBrandblog

{繼承

protected:token

   PhoneSoft cPhoneSoft

public:

  //設置手機軟件方法(橋接方法)

   void SetPhoneSoft(const PhoneSoft& cPhoneSoft)

  {

     this.cPhoneSoft = cPhoneSoft

  }

  //抽象軟件運行方法

  void run() = 0;

}

 

//RefinedAbstraction(具體品牌)
class PhoneBrandA : PhoneBrand

{

public:

  //軟件運行方法

  void run()

   {
    soft.run();
  }

}

//Implementor(手機軟件抽象類)

 

class PhoneSoft

{

public:

   void run () = 0;

}

 //ConcreteImplementorA(具體手機軟甲:遊戲)

class PhoneSoftGame : PhoneSoft

{

public:

  //軟件遊戲的實現

   void run () 

  {

    。。。;

  }

}

 //ConcreteImplementorB(具體手機軟甲:MP3)

class PhoneSoftMP3 : PhoneSoft

{

public:

  //軟件mp3的實現

   void run () 

  {

    。。。;

  }

}

//客戶端(實現一個帶有遊戲和mp3軟件的品牌A手機)

PhoneBrand* A = new PhoneBrandA("A");//建立品牌手機A

PhoneSoftGame cPhoneSoftGame;

A.SetPhoneSoft(cPhoneSoftGame);//加載遊戲軟件

A.run();

PhoneSoftMP3 cPhoneSoftMP3;

A.SetPhoneSoft(cPhoneSoftMP3);//加載mps軟件

A.run();

 

使用時機:

  當須要多角度去分類實現對象,而只是用繼承會形成大量類的增長,還會違背開閉原則,這時請考慮橋接模式。

 

優勢:

一、 橋接模式提升了系統的可擴充性,在兩個變化維度中任意擴展一個維度,都不須要修改原有系統。

二、實現細節對客戶透明,能夠對用戶隱藏實現細節。

 

缺點:

一、橋接模式的引入會增長系統的理解與設計難度,因爲聚合關聯關係創建在抽象層,要求開發者針對抽象進行設計與編程。

二、橋接模式要求正確識別出系統中兩個獨立變化的維度,所以其使用範圍具備必定的侷限性

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息