JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [DP] Bridge Pattern [精華]
UndeadJ

UX & UI Design



發文: 384
積分: 3
於 2003-09-30 20:47 user profilesend a private message to usersend email to UndeadJreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我之前看/練習別人的程式碼的時候,發現到程式碼中有一個技巧很好用,卻不知道那是Design Patterns中的一種—>Bridge Pattern。那時看到這個技巧的時候,心裡就冒出一句話” 程式就是要這樣寫,這樣才叫做在coding !! ” 。於是花了一段時間去參透它(程式碼),直到最近看到Design Patterns中的Bridge Pattern才恍然大悟…原來之前我看到的技巧就是在使用Bridge Pattern。底下說說我自己本身所知道的Bridge Pattern ~Smile

何謂Bridge Pattern,所謂的Bridge Pattern就是將抽象化的部分(Abstraction)與實作分開(Decouple),二者還可以獨立變化且不互相影響

舉幾個例子來說吧~
踩油門、畫圖、灌水…等,這些名詞(說動詞應該應該比較好一點),雖然我們都知道這些是在做什麼的,但卻不知道它們內部是何去運(實)做的(有誰知道油門踩多大力時車子引擎運轉速度加快多少?),通常user只需知道抽象化的部分(踩油門、畫圖、灌水),而不需知道內部的運(實)做方式,這就是將抽象化的部分與實作分開。

下面我舉一個例子來說明在還沒有了解Bridge Pattern的話(也就是不把抽象化的部分與實作分開)我們可能會如何做(當然或許不一定需要用到Bridge Pattern,也可能會用到Other Patterns,這裡先假設我們目前只知道這個Pattern),會發生什麼樣的情況(底下情況只是假設,不一定會在真實案例中出現)。

有一天程式設計師被Boss要求要做一個持卡(自家會員卡)優惠折扣(學生與社會工作者有不同的優惠折扣)的小系統,因為優惠折扣會改變(可能公司賠錢…等因素),為了換算的不必要的煩麻,所以要求做此一系統。於是程式設計師就笨笨的”只”照著Boss的要求開始動工coding去,想到的設計如下

(Class Diagram)

1
2
3
4
5
Card //卡,Abstract Class
S_AssociatorCard // 學生會員卡,繼承Card
W_AssociatorCard // 社會工作者會員卡,繼承Card
Student // 代表學生,Class
Worker // 代表社會工作者,Class


我們可以從這張圖知道目前的設計是沒有將抽象化的部分與實作分開,下面這二行透露了它們的內部運作(如何做換算),Boss要查閱學生or社會工作者目前的優惠折扣時,可以用下面

1
2
Student.S_Disscount();//取得目前學生優惠折扣 
Worker.W_Disscount();//取得目前社會工作者優惠折扣


這樣的方式來取得。到目前為止看起來都可以完成Boss所要求的。

這時程式設計師心裡想著,應該沒問題了,於是拿去給Boss看,Boss看了之後就說,公司日後還會推出Vip卡,一起加上去吧,這時候程式設計師又笨笨的”只”照著Boss的要求開始動工準備coding去,他心理想著,只是加個Vip卡也還好,不會太難,於是他又開始去畫設計圖(Class Diagram),如下


但程式設計師畫完後想到,如果Boss將需求再次增加(高級會員、高級Vip等等)的話,後果將是很可怕的(會非常大且複雜),可是程式設計師笨笨的不知從何改起,於是到處去打聽沒有沒改善的方法,終於有人提到boss辦公室有Design Patterns,可以解決目前的問題。

程式設計師看完後就馬上用Bridge Pattern做修改。

裡面提到首先要找出什麼是經常在變動的,而且一旦變動後其它就必需跟著變動(正所謂牽一髮而動全身),經常在變動的卡隨著卡在變動的優惠折扣

找到後將它們獨立出來,讓它們各自負責各自的工作,這樣一來不但容易增加也有彈性。



注意! 這邊最後的做法和Bridge Pattern的原始做法有點不太一樣,不過目地是一樣的...

--
UML可能有誤…我還不太會畫Tongue,觀迎討論及批評,感謝Smile
有空時補上程式碼(如果先前都沒錯的話)


UndeadJ edited on 2012-04-03 14:51
reply to postreply to post
我們是懷抱各自的夢想,買了車票的乘客,不過就像列車一定會有終點,人生有時會碰到必須換車的時候...

我們站在名為「今天」的車站,在名為「昨天」的列車下車,轉搭為「明天」的列車

不過,若沒及時搭上的話....
話題樹型展開
人氣 標題 作者 字數 發文時間
9991 [精華] [DP] Bridge Pattern UndeadJ 2283 2003-09-30 20:47
5927 Re:[DP] Bridge Pattern UndeadJ 0 2003-09-30 20:48
5719 Re:[DP] Bridge Pattern UndeadJ 0 2003-09-30 22:46
5608 Re:[DP] Bridge Pattern UndeadJ 0 2003-09-30 22:52
5840 Re:[DP] Bridge Pattern 李小e 578 2003-10-01 09:54
5840 Re:[DP] Bridge Pattern wctang 1794 2003-10-03 21:28
5577 Re:[DP] Bridge Pattern popcorny 66 2003-10-04 10:57
5946 Re:[DP] Bridge Pattern arthuroy 349 2003-10-07 17:14
5668 Re:[DP] Bridge Pattern robinjam 284 2003-10-08 10:31
5607 Re:[DP] Bridge Pattern Biologic 545 2003-10-08 11:06
5625 Re:[DP] Bridge Pattern worookie 76 2003-10-08 11:21
7178 Re:[DP] Bridge Pattern qing 682 2003-10-09 23:53
5437 Re:[DP] Bridge Pattern Biologic 822 2003-10-10 00:06
5674 Re:[DP] Bridge Pattern qing 586 2003-10-12 11:57
5480 Re:[DP] Bridge Pattern Biologic 529 2003-10-12 12:08
5525 Re:[DP] Bridge Pattern qing 385 2003-10-12 22:15
5384 Re:[DP] Bridge Pattern Biologic 602 2003-10-12 22:38
5542 Re:[DP] Bridge Pattern qing 346 2003-10-14 10:05
5299 Re:[DP] Bridge Pattern Biologic 303 2003-10-14 10:13
5568 Re:[DP] Bridge Pattern qing 171 2003-10-14 11:50
5303 Re:[DP] Bridge Pattern Biologic 338 2003-10-14 12:00
7019 Re:[DP] Bridge Pattern qing 323 2003-10-15 17:33
5508 Re:[DP] Bridge Pattern arthuroy 1318 2003-10-09 15:46
5976 Re:[DP] Bridge Pattern qing 251 2003-10-09 23:41
» JWorld@TW »  Software Design

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8