設計模式之橋接模式

2022-03-21 08:31:07 字數 2358 閱讀 1433

名詞解釋:

合成/聚合復用原則:盡量使用合成/聚合,盡量不要使用類繼承。合成和聚合都是關聯的特殊種類。聚合表示一種弱的「擁有」關係,體現的是a物件可以包含b物件,但b物件不是a物件的一部分;合成則是一種強的「擁有」關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一樣(即同時銷毀和存在)。合成/聚合復用原則的好處是,優先使用物件的合成/聚合將有助於你保持每個類被封裝,並被集中在單個任務上。這樣類和類繼承層次會保持較小規模,並且不太可能增長為不可控制的龐然大物。

橋接模式:將抽象部分與它的實現部分分離,使它們都可以獨立地變化。抽象與它的實現分離,實現指的是抽象類和它的派生類來實現自己的物件。

必要元素:

1.實現類,應為乙個抽象類;

2.具體實現類;

3.抽象類,其實此類本應為實現類的基類,但是此處我們遵循合成/聚合復用原則,所以不是繼承關係;

4.抽象類的實現類。

上例子:

抽象實現類:

abstract

class

implementor

具體實現類:

class

concreteimplementora:implementor

}class

concreteimplementorb:implementor

}

抽象類:

class

abstraction

public

virtual

void

operation()

}

抽象類的實現類:

class

refinedabstraction:abstraction

}

使用:

abstraction ab = new

refinedabstraction();

ab.setimplementor(

newconcreteimplementora());

ab.operation();

ab.setimplementor(

newconcreteimplementorb());

ab.operation();

console.read();

第二例子:

此模式靠上述的解釋,似乎還不太明白它是要幹嗎的,所以我們通過第二個例子加強對橋接模式的理解。

場景:假設有很多種手機品牌(可能是nokia,也可能是htc等),同時也有很多種軟體(社交類、遊戲類),怎麼做到可以根據手機品牌進行分類,也可以做到根據軟體進行分類,這時候我們就要考慮怎麼做既能保持原有的**不變化,也可以保證新功能的增加,其實就是要遵循「開-閉」原則。

分析:手機品牌呢,可能有很多種,同時也可能隨時增加品種;軟體呢,也是很多很多種,當然也有增加的可能。最重要的是如何在手機和軟體之間建立乙個聯絡,想想看這個是不是就是需要乙個橋梁將手機和軟體聯絡起來呢。

開始**(根據橋接模式的必要元素,分析**的構成):

抽象軟體類:

///

///抽象手機軟體類

/// abstract

class

phonesoft

具體軟體類(遊戲、通訊錄):

///

///通訊錄

/// class

phoneaddresslist:phonesoft

}//////

遊戲

/// class

phonegame:phonesoft

}

抽象手機品牌類:

///

///手機品牌類

/// abstract

class

phonebrand

public

abstract

void

run();

}

手機具體品牌類(m、n):

class

phonebrandm:phonebrand

}class

phonebrandn:phonebrand

}

在這裡,主要是將品牌和軟體進行了分別提取,然後各自都有自己的抽象類和具體實現類,當然在品牌中是存在軟體的物件以及設定軟體物件的方法,最終在執行的方法中呼叫軟體的操作方法。

總結:橋接模式可以通俗理解為,實現系統可能有多角度分類,每一種分類都有可能變化,那麼就把這種多角度分離出來讓它們獨立變化,減少它們之間的耦合。

設計模式之橋接模式

public class test 兩個維度 乙個是具體產品,如狗 豬 乙個是抽象產品,如溫順的動物 冷酷的動物 排列組合 如溫順的狗 冷酷的豬等 abstract class animal 該橋接類的引入是關鍵 abstract class animalbridge extends animal ...

設計模式之 橋接模式

今天來學習橋接模式,在我們日常生活中,有很多的事物是可以 多維度 的變化的,比如我們去吃麵條,有雞絲面和牛肉麵兩種,每一種面又分為辣味的和不辣的,而且每種面可能會分為大碗小碗的。很多事物能夠變化的維度不止一種,甚至數十種,那麼我們在 上怎麼應對這些變化呢?每乙個都單獨弄乙個類顯然不是什麼好辦法。那麼...

設計模式之橋接模式

在軟體系統中,某些型別由於自身的邏輯,它具有兩個或多個維度的變化,那麼如何應對這種 多維度的變化 如何利用物件導向的技術來使得該型別能夠輕鬆的沿著多個方向進行變化,而又不引入額外的複雜度?這就要使用橋接模式。現在有咖啡,按大小分可以分為中杯和大杯,按型別可以分為拿鐵和摩卡,所以現在總共有四中咖啡,中...