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看一下圖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上面是 環境維度的結構,下面來看"**"型別維度的結構:///2
///環境
3///
4public
inte***ce
ienvironment511
///12
///水下環境的
13///
14public
class
underwater : ienvironment
1521}22
///23
///真空環境下的
24///
25public
class
empty : ienvironment
2632 }
1如圖2的所示現在的物件結構:///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 }
型別都已經定義完成了,現在來看一下客戶端呼叫**:
1結果如圖3所示://weapon weapon = new laserweapon();
//這裡已經預設的是水下壞境了
2 weapon weapon = new missileweapon(new
empty());
3 weapon.attack();
橋接模式就講到這裡. 下乙個篇幅將講到怎麼把"**"安裝到"部件"上使用的「裝飾者模式」。
出處:
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 ...