定義:也叫合成模式,或者部分-整體模式,主要是用來(lái)描述部分與整體的關(guān)系,定義,將對(duì)象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。
類圖:
角色說(shuō)明:
Componnent抽象構(gòu)件角色:定義參加組合對(duì)象的共有方法和屬性,可以定義一些默認(rèn)的行為或?qū)傩浴?br />Leaf葉子構(gòu)件:葉子對(duì)象,其下再也沒有其他的分支,也就是遍歷的最小單位。
Composite樹枝構(gòu)件:樹枝對(duì)象,它的作用是組合樹枝節(jié)點(diǎn)和葉子節(jié)點(diǎn)形成一個(gè)樹形結(jié)構(gòu)。
實(shí)例:
聽說(shuō)你們公司最近新推出了一款電子書閱讀應(yīng)用,市場(chǎng)反應(yīng)很不錯(cuò),應(yīng)用里還有圖書商城,用戶可以在其中隨意選購(gòu)自己喜歡的書籍。你們公司也是對(duì)此項(xiàng)目高度重視,加大了投入力度,決定給此應(yīng)用再增加點(diǎn)功能。
好吧,你也知道你是逃不過(guò)此劫了,沒過(guò)多久你的leader就找到了你。他告訴你目前的應(yīng)用對(duì)每本書的瀏覽量和銷售量做了統(tǒng)計(jì),但現(xiàn)在想增加對(duì)每個(gè)書籍分類的瀏覽量和銷售量以及所有書籍總的瀏覽量和銷售量做統(tǒng)計(jì)的功能,希望你可以來(lái)完成這項(xiàng)功能。
領(lǐng)導(dǎo)安排的工作當(dāng)然是推脫不掉的,你只能硬著頭皮上了,不過(guò)好在這個(gè)功能看起來(lái)也不怎么復(fù)雜。
你比較喜歡看小說(shuō),那么就從小說(shuō)類的統(tǒng)計(jì)功能開始做起吧。首先通過(guò)get_all_novels方法可以獲取到所有的小說(shuō)名,然后將小說(shuō)名傳入get_browse_count方法可以得到該書的瀏覽量,將小說(shuō)名傳入get_sale_count方法可以得到該書的銷售量。你目前只有這幾個(gè)已知的API可以使用,那么開始動(dòng)手吧!
def get_novels_browse_count browse_count = 0 all_novels = get_all_novels() all_novels.each do |novel| browse_count += get_browse_count(novel) end browse_count end def get_novels_sale_count sale_count = 0 all_novels = get_all_novels() all_novels.each do |novel| sale_count += get_browse_count(novel) end sale_count end
很快你就寫下了以上兩個(gè)方法,這兩個(gè)方法都是通過(guò)獲取到所有的小說(shuō)名,然后一一計(jì)算每本小說(shuō)的瀏覽量和銷售量,最后將結(jié)果相加得到總量。
小說(shuō)類的統(tǒng)計(jì)就完成了,然后你開始做計(jì)算機(jī)類書籍的統(tǒng)計(jì)功能,代碼如下所示:
def get_computer_books_browse_count browse_count = 0 all_computer_books = get_all_computer_books() all_computer_books.each do |computer_book| browse_count += get_browse_count(computer_book) end browse_count end def get_computer_books_sale_count sale_count = 0 all_computer_books = get_all_computer_books() all_computer_books.each do |computer_book| sale_count += get_browse_count(computer_book) end sale_count end
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注