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

» JWorld@TW » Software Design » GoF  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Design Patterns 入門 - 組合(Composite) [精華]
caterpillar

良葛格

版主

發文: 2613
積分: 70
於 2003-12-24 22:51 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
此文件已有新版
http://openhome.cc/Gossip/DesignPattern/

如果以繪圖為例的話,一個文字是一個繪圖元件,一個線段是一個繪圖元件,而一個長方形也是一個繪圖元件,這些繪圖元件可以組成一個圖片,如果我們將這個圖片也視作一個繪圖元件,則這麼遞迴繪圖下去,就可以組合成一個較大的、複雜的圖形元件,這樣的目的我們可以使用組合(Composite)模式來解決。

對於使用者而言,無論是文字、線段或長方形,甚至是組合後的圖片元件,它們都擁有一個共同的行為,使用者基本上並不會感覺出它們之間的操作有任何的不同,您可以拖曳、放大、縮小等等,這些行為都是一致的。
我們以UML來表示上面這個例子的結構:


對於Text、Line與Rectangle而言,Picture是一個容器,然而Picture繼承Graphic類,所以它也是一個繪圖元件,您可以進一步的將Picture組合至另一個Picture中,以形成較大的、複雜的圖形。

組合模式的UML結構圖如下所示:


依此架構,您可以遞迴的組合圖形元件,例如:


除了繪圖元件之外,一些具有層次性或組合性的物件也可以使用組合模式,像是電路元件、設備元件等等,使用組合模式可以大大減低這些元件設計的複雜度。


caterpillar edited on 2013-04-06 16:56
reply to postreply to post
良葛格學習筆記
作者 Re:Design Patterns - 組合(Composite) [Re:caterpillar]
Biologic

生物學下的產物



發文: 524
積分: 4
於 2003-12-24 23:49 user profilesend a private message to usersend email to Biologicreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
caterpillar wrote:
如果以繪圖為例的話,一個文字是一個繪圖元件,一個線段是一個繪圖元件,而一個長方形也是一個繪圖元件,這些繪圖元件可以組成一個圖片,如果我們將這個圖片也視作一個繪圖元件,則這麼遞迴繪圖下去,就可以組合成一個較大的、複雜的圖形元件,這樣的目的我們可以使用組合(Composite)模式來解決。

例子 File System.


reply to postreply to post
作者 Re:Design Patterns 入門 - 組合(Composite) [Re:caterpillar]
esunyang





發文: 14
積分: 0
於 2006-03-31 17:41 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
本來組合模式中,對於組合對象的導航和管理是很復雜的,樓主卻對此只字不提。。。。

reply to postreply to post
作者 Re:Design Patterns 入門 - 組合(Composite) [Re:esunyang]
caterpillar

良葛格

版主

發文: 2613
積分: 70
於 2006-03-31 18:26 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
導航和管理如何個復雜法,還請您指教。。。Orz....

reply to postreply to post
良葛格學習筆記
作者 Re:Design Patterns 入門 - 組合(Composite) [Re:caterpillar]
GuanChih

ASKA



發文: 243
積分: 2
於 2006-05-09 13:55 user profilesend a private message to usersend email to GuanChihreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
剛剛從JUnit in action看到的,剛好講到pattern的東西,
在TestCase, TestSuite 的設計上,作者有用Composite pattern來做解釋:

Composite pattern. “Compose objects into tree structures to represent part-whole
hierarchies. Composite lets clients treat individual objects and compositions
of objects uniformly.
”1 JUnit’s use of the Test interface to run a single
test or suites of suites of suites of tests is an example of the Composite pattern.

When you add an object to a TestSuite, you are really adding a Test, not
simply a TestCase. Because both TestSuite and TestCase implement Test,
you can add either to a suite. If the Test is a TestCase, the single test is run. If
the Test is a TestSuite, then a group of tests is run (which could include
other TestSuites.

--
ps.->TestCase和TestSuite都實作Test。


GuanChih edited on 2006-05-09 14:08
reply to postreply to post
» JWorld@TW »  Software Design » GoF

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

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8