看了看 看了看。。看不明白。
還是那圖,還是那人。
傷腦筋。
不過看到了幾句話:
oo的原則 之一就是 相比使用繼承 使用 對象組合更好 。
另外:
GoF 在說明Bridge 模式時,在意圖中指出Bridge 模式“將抽象部分與它的實現部分分
離,使得它們可以獨立地變化”。而這裡的“實現”的含義指的是怎麼去實現
使用者的需求,並且指的是通過組合(委託)的方式實現的,因此這裡的實現不是指的繼承基
類、實現基類介面,而是指的是通過對象組合實現使用者的需求。理解了這一點也就理解了
Bridge 模式,理解了Bridge 模式,你的設計就會更加Elegant 了。
拿這裡的抽象是對應 使用者需求地抽象嗎?
橋是什麼東西呢.
橋下是河,橋地兩旁是小山丘,住著人。這些人可以通過這座橋往來。這裡的人不是通常得人。 橋的一旁可以發生改變,但是另外一旁卻可以不變。
橋是一種聯絡,關係。關係很抽象。你可以說人和諸由聯絡,人和石頭有聯絡,。。。沒有關係的 你可以為他們建立關係。
在程式設計中 通常的能訪問是說 一方包含另一方。
說說橋的表面形式吧。
兩個抽象類別A1,A2,其中A1能訪問 A2(A1有一個成員是指向A2的指標 ,之所以使用指標是因為運行時邦定)。A1,A2均可以派生出很多子類。
你只要在A1的建構函式中傳入一個A2類系的指標,這樣你的 A1類系的 對象就可以訪問相應的A2類系的成員了。
說了這麼多還時那樣。
通過組合改變類對象的行為。當一個類對象包含其他類對象時,可以通過改變它所包含的類對象來改變它的行為。
不過別忘了 為了看起來好看 ,有讓他們有共同的或者相似的介面(成員方法)。
I(/fn/)
// //
A1(//A2*pq2//)------------橋---------------------->A2
|| || || || //
A11 A12 A21 A22 A23
//
A1 *pa1= new A11( new A21 );
pa1->fn();
pa1= new A12( new A21);
pa1->fn();
pa1= new A11(new A22);
pa1->fn();
//注意橋這種模式是 針對 使用者需求的(具體什麼意思我也不曉得)