C 設計模式之橋接

2021-06-22 01:57:23 字數 3158 閱讀 8480

ironman之橋接 前言

前面的幾個篇幅都是在講"部件"的生產已經簡簡單單的使用,以後可能要對"部件"進行公升級,不是不對它本身公升級,是其它方式的公升級,可以讓它配備**。 有沒有感覺"部件"是越來越強大了,事物的衍變都是有個過程的嘛,必須要越來越完善,這是"ironman"設計的宗旨。

好了,廢話不多說了,現在所要做的工作就是設計好這個"**",以便在後面的篇幅中和"部件"很好的結合在一起。來看一下"**"的定義:

1

///2

///**

3///

4public

abstract

class

weapon511

///12

///雷射**

13///

14public

class

laserweapon : weapon

1521}22

///23

///飛彈**

24///

25public

class

missileweapon : weapon

2632 }

這樣看起來好像沒有什麼不妥的,因為出於設計的全面性和以便於以後的擴充套件,所以要盡可能的想的全面。

"**"的使用也是要受環境限制或影響的。在這裡怎麼表現出來呢?

先假設兩種壞境的下**使用,一種是水下,一種是太空中(真空狀態)

1

///2

///水下的雷射**

3///

4public

class

underwaterlaserweapon : laserweapon512

}13///14

///真空狀態下雷射**

15///

16public

class

emptylaserweapon : laserweapon

1724}25

///26

///水下的飛彈**

27///

28public

class

underwatermissileweapon : missileweapon

2936}37

///38

///真空下的飛彈**

39///

40public

class

emptymissileweapon : missileweapon

4148 }

看一下圖1所示現在所有型別的結構圖

整體的設計是沒有大礙的,在增加一項"**"型別時也是沒有問題了,同樣遵循著開閉原則。

如果是在新增一種壞境的時候也是遵循著開閉原則的,但是違背了類的單一職責原則,而且這樣的設計繼承關係太多,不易維護難以擴充套件,如果這個"**"是多維的,而且是同時的向著多維前面變化的,那麼這個"**"的結構將會變的龐大無比。

現在應該是"橋接"大展身手的時候了,要在"**"的兩個(或者更多)變化的方向解耦,把強耦合變成弱聯絡。實現

原來"**"的結構不變,只需要在其中的乙個維度中提取出抽象(實現類介面),然後"**"(抽象類)引用從維度中提取出的抽象就好了。

我們來看一下結構:

1

///2

///環境

3///

4public

inte***ce

ienvironment511

///12

///水下環境的

13///

14public

class

underwater : ienvironment

1521}22

///23

///真空環境下的

24///

25public

class

empty : ienvironment

2632 }

上面是 環境維度的結構,下面來看"**"型別維度的結構:

1

///2

///**

3///

4public

abstract

class

weapon512

///13

///雷射**

14///

15public

class

laserweapon : weapon

16//

預設使用環境為水下

18public

laserweapon(ienvironment environment)

1922

public

override

void

attack()

2328}29

///30

///飛彈**

31///

32public

class

missileweapon : weapon

3335

public

missileweapon(ienvironment environment)

3639

public

override

void

attack()

4045 }

如圖2的所示現在的物件結構:

型別都已經定義完成了,現在來看一下客戶端呼叫**:

1

//weapon weapon = new laserweapon();

//這裡已經預設的是水下壞境了

2 weapon weapon = new missileweapon(new

empty());

3 weapon.attack();

結果如圖3所示:

橋接模式就講到這裡. 下乙個篇幅將講到怎麼把"**"安裝到"部件"上使用的「裝飾者模式」。

出處:

C 設計模式之橋接模式

橋接模式,合成,聚合復用原則 include using namespace std class soft class notepad public soft class qtcreator public soft class computer virtual void run 0 class le...

C 設計模式之橋接模式

問題描述 現在要去畫乙個圖形,圖形有長方形 圓形和扇形等等 而圖形又可以加上不同的顏色,然後,我們就可以畫出紅色的長方形,綠色的長方形 紅色的圓形,綠色的圓形等等。而這種圖形的形狀在變化,圖形的顏色也在變化,當使用 去實現時,如何面對這種多方面的變化呢?這就要說到今天的橋接模式了。什麼是橋接模式?對...

設計模式之橋接模式

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