成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計模式編程中的運用

詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計模式編程中的運用

熱門標簽:白銀外呼paas系統(tǒng) 滴滴外呼系統(tǒng) 高德地圖標注客服 常德電銷平臺外呼系統(tǒng)軟件價格 電銷機器人廠商代理 百度地圖標注自定義圖片 湖州u友防封電銷卡 地圖標注賺錢項目注冊 徐州網(wǎng)絡(luò)外呼系統(tǒng)哪個好

定義:也叫合成模式,或者部分-整體模式,主要是用來描述部分與整體的關(guān)系,定義,將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),使得用戶對單個對象和組合對象的使用具有一致性。

類圖:

角色說明:

Componnent抽象構(gòu)件角色:定義參加組合對象的共有方法和屬性,可以定義一些默認的行為或?qū)傩浴?br /> Leaf葉子構(gòu)件:葉子對象,其下再也沒有其他的分支,也就是遍歷的最小單位。
Composite樹枝構(gòu)件:樹枝對象,它的作用是組合樹枝節(jié)點和葉子節(jié)點形成一個樹形結(jié)構(gòu)。

實例:
聽說你們公司最近新推出了一款電子書閱讀應(yīng)用,市場反應(yīng)很不錯,應(yīng)用里還有圖書商城,用戶可以在其中隨意選購自己喜歡的書籍。你們公司也是對此項目高度重視,加大了投入力度,決定給此應(yīng)用再增加點功能。
好吧,你也知道你是逃不過此劫了,沒過多久你的leader就找到了你。他告訴你目前的應(yīng)用對每本書的瀏覽量和銷售量做了統(tǒng)計,但現(xiàn)在想增加對每個書籍分類的瀏覽量和銷售量以及所有書籍總的瀏覽量和銷售量做統(tǒng)計的功能,希望你可以來完成這項功能。
領(lǐng)導(dǎo)安排的工作當然是推脫不掉的,你只能硬著頭皮上了,不過好在這個功能看起來也不怎么復(fù)雜。
你比較喜歡看小說,那么就從小說類的統(tǒng)計功能開始做起吧。首先通過get_all_novels方法可以獲取到所有的小說名,然后將小說名傳入get_browse_count方法可以得到該書的瀏覽量,將小說名傳入get_sale_count方法可以得到該書的銷售量。你目前只有這幾個已知的API可以使用,那么開始動手吧!

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 

很快你就寫下了以上兩個方法,這兩個方法都是通過獲取到所有的小說名,然后一一計算每本小說的瀏覽量和銷售量,最后將結(jié)果相加得到總量。
小說類的統(tǒng)計就完成了,然后你開始做計算機類書籍的統(tǒng)計功能,代碼如下所示:

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 

除了使用了get_all_computer_books方法獲取到所有的計算機類書名,其它的代碼基本和小說統(tǒng)計中的是一樣的。
現(xiàn)在你才完成了兩類書籍的統(tǒng)計功能,后面還有醫(yī)學(xué)類、自然類、歷史類、法律類、政治類、哲學(xué)類、旅游類、美食類等等等等書籍。你突然意識到了一些問題的嚴重性,工作量大倒還不算什么,但再這么寫下去,你的方法就要爆炸了,這么多的方法讓人看都看不過來,別提怎么使用了。
這個時候你只好向你的leader求助了,跟他說明了你的困惑。只見你的leader思考了片刻,然后自信地告訴你,使用組合模式不僅可以輕松消除你的困惑,還能出色地完成功能。
他立刻向你秀起了編碼操作,首先定義一個Statistics類,里面有兩個方法:

class Statistics 
   
  def get_browse_count 
    raise "You should override this method in subclass." 
  end 
   
  def get_sale_count 
    raise "You should override this method in subclass." 
  end 
   
end 

這兩個方法都是簡單地拋出一個異常,因為需要在子類中重寫這兩個方法。
然后定義一個用于統(tǒng)計小說類書籍的NovelStatistics類,繼承剛剛定義的Statistics類,并重寫Statistics中的兩個方法:

class NovelStatistics  Statistics 
 
  def get_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_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 
 
end 

在這兩個方法中分別統(tǒng)計了小說類書籍的瀏覽量和銷售量。那么同樣的方法,你的leader又定義了一個ComputerBookStatistics類用于統(tǒng)計計算機類書籍的瀏覽量和銷售量:

class ComputerBookStatistics  Statistics 
 
  def get_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_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 
 
end 

這樣將具體的統(tǒng)計實現(xiàn)分散在各個類中,就不會再出現(xiàn)你剛剛那種方法爆炸的情況了。不過這還沒開始真正使用組合模式呢,好戲還在后頭,你的leader吹噓道。

再定義一個MedicalBookStatistics類繼承Statistics,用于統(tǒng)計醫(yī)學(xué)類書籍的瀏覽量和銷售量,代碼如下如示:

class MedicalBookStatistics  Statistics 
 
  def get_browse_count 
    browse_count = 0 
    all_medical_books = get_all_medical_books() 
    all_medical_books.each do |medical_book| 
      browse_count += get_browse_count(medical_book) 
    end 
    browse_count 
  end 
   
  def get_sale_count 
    sale_count = 0 
    all_medical_books = get_all_medical_books() 
    all_medical_books.each do |medical_book| 
      sale_count += get_browse_count(medical_book) 
    end 
    sale_count 
  end 
 
end 

不知道你發(fā)現(xiàn)了沒有,計算機類書籍和醫(yī)學(xué)類書籍其實都算是科技類書籍,它們是可以組合在一起的。這個時候你的leader定義了一個TechnicalStatistics類用于對科技這一組合類書籍進行統(tǒng)計:

class TechnicalStatistics  Statistics 
 
  def initialize 
    @statistics = [] 
    @statistics  ComputerBookStatistics.new 
    @statistics  MedicalBookStatistics.new 
  end 
 
  def get_browse_count 
    browse_count = 0 
    @statistics.each do |s| 
      browse_count += s.get_browse_count 
    end 
    browse_count 
  end 
   
  def get_sale_count 
    sale_count = 0 
    @statistics.each do |s| 
      sale_count += s.get_sale_count 
    end 
    sale_count 
  end 
 
end 

可以看到,由于這個類是組合類,和前面幾個類還是有不少區(qū)別的。首先TechnicalStatistics中有一個構(gòu)造函數(shù),在構(gòu)造函數(shù)中將計算機類書籍和醫(yī)學(xué)類書籍作為子分類添加到statistics數(shù)組當中,然后分別在get_browse_count和get_sale_count方法中遍歷所有的子分類,計算出它們各自的瀏覽量和銷售量,然后相加得到總額返回。
組合模式的擴展性非常好,沒有各種條條框框,想怎么組合就怎么組合,比如所有書籍就是由各個分類組合而來的,你的leader馬上又向你炫耀了統(tǒng)計所有書籍的瀏覽量和銷售量的辦法。
定義一個AllStatistics類繼承Statistics,具體代碼如下所示:

class AllStatistics  Statistics 
 
  def initialize 
    @statistics = [] 
    @statistics  NovelStatistics.new 
    @statistics  TechnicalStatistics.new 
  end 
 
  def get_browse_count 
    browse_count = 0 
    @statistics.each do |s| 
      browse_count += s.get_browse_count 
    end 
    browse_count 
  end 
   
  def get_sale_count 
    sale_count = 0 
    @statistics.each do |s| 
      sale_count += s.get_sale_count 
    end 
    sale_count 
  end 
 
end 

在AllStatistics的構(gòu)造函數(shù)中將小說類書籍和科技類書籍作為子分類添加到了statistics數(shù)組當中,目前你也就只寫好了這幾個分類。然后使用同樣的方法在get_browse_count和get_sale_count方法中統(tǒng)計出所有書籍的瀏覽量和銷售量。
當前組合結(jié)構(gòu)的示意圖如下:

現(xiàn)在你就可以非常方便的得到任何分類書籍的瀏覽量和銷售量了,比如說獲取科技類書籍的瀏覽量,你只需要調(diào)用:

TechnicalStatistics.new.get_browse_count 

而獲取所有書籍的總銷量,你只需要調(diào)用:

AllStatistics.new.get_sale_count 

當然你后面還可以對這個組合結(jié)構(gòu)隨意地改變,添加各種子分類書籍,而且子分類的層次結(jié)構(gòu)可以任意深,正如前面所說,組合模式的擴展性非常好。
你的leader告訴你,目前他寫的這份代碼重復(fù)度比較高,其實還可以好好優(yōu)化一下的,把冗余代碼都去除掉。當然這個任務(wù)就交給你來做了,你的leader可是大忙人,早就一溜煙跑開了。

總結(jié)

組合模式的優(yōu)點:
能夠靈活的組合局部對象和整體對象之間的關(guān)心,對客戶端來說,局部對象和整體對象的調(diào)用沒有差別,使調(diào)用簡單。

組合模式的缺點:
1.組合操作的成本很高,如果一個對象樹中有很多子對象,可能一個簡單的調(diào)用就可能使系統(tǒng)崩潰;
2.對象持久化的問題,組合模式是樹形結(jié)構(gòu),不能很好地在關(guān)系數(shù)據(jù)庫中保存數(shù)據(jù),但是卻非常適合用于xml持久化。

組合模式的適用場景:
1.維護和展示部分—整體關(guān)系得場景,如樹形菜單、文件和文件夾管理。
2.從一個整體中能夠獨立出部分模塊或功能的場景。

您可能感興趣的文章:
  • 設(shè)計模式中的觀察者模式在Ruby編程中的運用實例解析
  • 實例解析Ruby設(shè)計模式開發(fā)中對觀察者模式的實現(xiàn)
  • 深入剖析Ruby設(shè)計模式編程中對命令模式的相關(guān)使用
  • Ruby設(shè)計模式編程中對外觀模式的應(yīng)用實例分析
  • 設(shè)計模式中的模板方法模式在Ruby中的應(yīng)用實例兩則
  • 實例解析Ruby設(shè)計模式編程中Strategy策略模式的使用
  • 實例講解Ruby使用設(shè)計模式中的裝飾器模式的方法
  • Ruby設(shè)計模式編程中使用Builder建造者模式的實例
  • 詳解Ruby設(shè)計模式編程中對單例模式的運用
  • Ruby設(shè)計模式編程之適配器模式實戰(zhàn)攻略
  • Ruby使用設(shè)計模式中的代理模式與裝飾模式的代碼實例
  • Ruby中使用設(shè)計模式中的簡單工廠模式和工廠方法模式
  • 解析proxy代理模式在Ruby設(shè)計模式開發(fā)中的運用

標簽:梧州 張家界 荊門 公主嶺 永州 三沙 遼寧 普洱

巨人網(wǎng)絡(luò)通訊聲明:本文標題《詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計模式編程中的運用》,本文關(guān)鍵詞  詳解,組合,模式,的,結(jié)構(gòu),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計模式編程中的運用》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計模式編程中的運用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    日本综合视频| 日韩av高清在线观看| 成人a视频在线| 欧美日本黄色片| 先锋资源中文在线| 国产精品一区二区电影| 久久香蕉国产线看观看99| 亚洲欧美三级伦理| 日韩欧美一二三区| 91伊人久久大香线蕉| 午夜影院久久久| 四虎在线视频免费观看| 日本亚洲欧美美色| 亚洲一区美女视频在线观看免费| 亚洲女同在线| 欧美在线性爱视频| 久久国产精品1区2区3区网页| 天堂资源在线播放| 黄色视屏在线免费观看| 国产在线精品一区二区| av免费在线视| 青娱乐国产精品| 色综合91久久精品中文字幕| 国产精品亚洲专一区二区三区| 欧美激情在线精品一区二区三区| 成人国产电影在线观看| 天天色棕合合合合合合合| 欧美亚洲日本黄色| 久久社区一区| 亚洲在线日韩| 国产精品久久久久久亚洲伦| 久久综合九九| www.97视频| 少妇精品无码一区二区免费视频| 成人动漫视频在线| 亚洲精品少妇一区二区| 免费福利在线观看| 国产精品亚洲一区二区在线观看| 久久一区二区中文字幕| 国产精品日韩欧美一区二区三区| 国产精品嫩草影院在线看| 亚洲精品一区二区三区精华液| 国产精品十八以下禁看| 欧美伊人亚洲伊人色综合动图| 国产探花视频在线| 国产精品jizz在线观看麻豆| 精品一区二区男人吃奶| 久久理论片午夜琪琪电影网| 熟妇高潮一区二区| 欧美日韩激情在线| 欧美性猛交xxxx乱大交极品| 懂色av蜜臀av粉嫩av分享吧| 色呦呦一区二区| 一本色道久久| 一区二区三区的久久的视频| 一级特黄aa大片| 成人黄色免费片| 亚洲视频手机在线观看| 九九九久久久久久久| 欧美国产一区二区三区| 波多野结衣啪啪| 中文文字幕文字幕高清| 国产精品麻豆免费版现看视频| 国产成人77亚洲精品www| 在线播放你懂得| 日韩精品――色哟哟| 波多野结衣久久精品| 日本精品一区二区三区在线| 污污免费网站| 熟女av一区二区| 黄网在线观看视频| 激情久久久久| 一区二区在线高清视频| 欧美变态凌虐bdsm| 午夜探花在线观看| 日本中文在线播放| 五月婷婷在线观看| 国产在线观看无码免费视频| 26uuu亚洲国产精品| 91av一区二区三区| 亚洲精品欧美激情| 大地资源网3页在线观看| 亚洲精品乱码视频| 电影天堂最新网址| 国产精品黄页网站在线播放免费| 91av在线网站| 中文字幕第一页在线视频| 欧美三级黄色大片| 亚洲色图一区二区| 91久久国产综合久久| 亚洲精品中文字幕乱码| 九色porny蝌蚪视频在线观看| 国产在线一区二区三区四区| 欧美午夜精品久久久久久蜜| 国产特黄大片aaaa毛片| 欧美日韩精品久久久免费观看| 国产精品久久一区二区三区不卡| 精品久久久久久久久久久久久久| 欧美高清影院| 国产精品色视频| 日韩在线一区二区三区免费视频| 国产精品视频久久一区| 成人av电影天堂| 日本在线免费播放| 成人精品视频99在线观看免费| 极品粉嫩美女露脸啪啪| 国产精品久久久久久久久久久久久久久久久久| 国自产精品手机在线观看视频| 亚洲精品97久久久babes| 欧美在线高清视频| 久久97久久97精品免视看| 国产精品伊人久久| 99国产精品久久一区二区三区| 久久天堂夜夜一本婷婷麻豆| 国产日韩精品一区观看| 亚洲国产综合91精品麻豆| 国产欧美一区二区三区鸳鸯浴| 欧美mv日韩mv国产网站| 91精品国产综合久久久久久蜜臀| heyzo一本久久综合| 国产网红在线| 精品www久久久久奶水| 911精品国产一区二区在线| 国产精品99re| 国产在线精品一区在线观看麻豆| 免费xxxxx网站中文字幕| 国产亚洲精品午夜高清影院| 中文幕av一区二区三区佐山爱| 国产成人8x视频一区二区| 国产91精品一区二区麻豆网站| 国产欧美高清在线| 亚洲欧洲xxxx| 日韩在线资源网| 九九视频这里只有精品| 在线观看免费观看在线91| 欧美丝袜激情| 亚洲欧洲美洲一区二区三区| 欧洲精品一区二区| 日日噜噜夜夜狠狠视频欧美人| 在线欧美日韩国产| 好色视频app| 成人3d精品动漫精品一二三| 丰满少妇一区二区三区专区| 欧美作爱福利免费观看视频| 欧美福利视频| 国产偷久久久精品专区| 中文国产成人精品| 五月伊人六月| 99国产揄拍国产精品| 国产成人精品18| 黄色大片免费看| 99久久精品国产亚洲精品| 久久―日本道色综合久久| 久久久亚洲精选| 在线观看的av网站| 精品日韩欧美一区| 国产视频在线观看一区| 国产中文字幕在线免费观看| 国产黄色一级网站| 中文字幕欧美精品在线| 麻豆91在线播放免费| 国产精品一区二区免费福利视频| 小日子的在线观看免费第8集| 色婷婷av一区二区三区在线观看| 久久日.com| 亚洲欧美精品一区二区| 国产精品一区二区三区四区在线观看| 日韩欧美一区二区三区四区五区| 97电影在线看视频| 性久久久久久久久久久| 中文字幕乱码av| 91九色蝌蚪| 国产一区二区三区视频在线观看| 香港三日本8a三级少妇三级99| 狠狠干天天爱| 美女网站免费观看| 日产精品一线二线三线芒果| 欧美成人有码| 久久国产精品首页| 日韩一区二区三区av| jizzjizz日本护士视频| 91在线porny国产在线看| 亚洲天堂2016| 精品一区二区三区在线观看l| 亚洲精品中文在线观看| 中文字幕有码在线观看| 日本边添边摸边做边爱的第三级| 裸体av在线| 久久99久国产精品黄毛片入口| 国产一区二区三区天码| 中文字幕在线免费专区| 国精产品一区一区三区免费视频| 91ph在线| 午夜dj在线观看高清视频完整版| 午夜精品在线视频一区| 国产xxxxx在线观看| 永久免费av片在线观看全网站| 可以直接在线观看的av| 狠狠躁少妇一区二区三区| 欧美精品1区2区| 91美女片黄在线观看游戏| 亚洲欧美日本国产有色| 亚洲一区二区av电影| 亚洲一区二区三区免费视频| 99久久精品免费精品国产| 日韩在线中文字| xxww在线观看| 欧美一级片久久久久久久| 97人妻人人澡人人爽人人精品| 国产一级免费片| 日韩视频一区二区在线观看| 国产欧美日韩麻豆91| 日韩av大片在线| yiren22亚洲综合伊人22| 成人动漫一区二区| 国产精品免费视频一区二区三区| 久久综合久久综合久久| 无套内谢的新婚少妇国语播放| 中文字幕免费高清在线观看| 人妻一区二区三区免费| 久久久久青草大香线综合精品| 色综合久久中文字幕综合网小说| 大量国产精品视频| gay欧美网站| 国产高清免费av| av综合网站| 日本特黄特色aaa大片免费| 国产精品69久久久久孕妇欧美| 国产精品扒开腿做爽爽爽男男| 91视频免费观看| 日本网址在线观看| 黄色一级视频播放| 无码一区二区三区视频| 同产精品九九九| 欧美日韩大陆一区二区| 国产乱淫片视频| 欧美jiizzhd精品欧美| 黄频在线免费观看| 亚洲精品一区国产| 国产婷婷一区二区三区久久| 亚洲不卡1卡2卡三卡2021麻豆| 亚洲国产欧美精品| 喷水视频在线观看| 国产精品视频看| avav在线看| 国产亚洲精品久久久久久青梅| 9l国产精品久久久久麻豆| 国产chinasex对白videos麻豆| 成人h猎奇视频网站| 国产视频不卡一区| 欧美三级xxx| 九色视频成人自拍| 久久精品人人做人人爽电影| 草莓视频18免费观看| 成人xxx免费视频播放| 中文字幕av日韩| 91国产一区在线| 蜜臀久久99精品久久久无需会员| 欧美凹凸一区二区三区视频| 激情综合亚洲| 成人动漫h在线观看| 亚洲在线免费观看视频| 国产精品成人aaaa在线| 欧美日韩成人黄色| 手机看片福利视频| 亚洲裸体视频| 1769国产精品视频| 欧美黄色高清视频| 三级在线观看网站| 伊人av成人| 亚洲最大的成人av| 日本不卡视频在线观看| 国产精品久久久久久影视| caoporn国产精品免费视频| 精品一区二区影视| 99thz桃花论族在线播放| 欧美午夜春性猛交xxxx| 女同互添互慰av毛片观看| 亚洲一区二区精品在线| 国产精品视频色| 欧美日韩中字一区| 美日韩一二三区| 永久免费看片在线观看| 国产无套在线观看| 黑人与亚洲人色ⅹvideos| 妞干网在线免费视频| 精品一区二区三区电影| 中文字幕在线永久在线视频2020| 亚洲精品视频在线观看视频| 久草视频观看| 91极品女神私人尤物在线播放| 972aa.com艺术欧美| 蜜桃视频在线播放| av无码久久久久久不卡网站| 日韩精品国产欧美| 欧美在线免费视屏| 国产亚洲欧美日韩在线观看一区二区| 亚洲色图在线视频| 老师我好爽再深一点的视频| 国产成人av电影在线播放| 波多野结衣大片| 国产白丝一区二区三区| 亚洲高清免费观看高清完整版| 黄色小网站在线观看| 小说区亚洲自拍另类图片专区| 国产在线黄色片| 992tv成人免费视频| 中文字幕第一页在线视频| 欧美性猛交xxxx黑人猛交| 国产精品久久久久影视| 91n在线视频| 亚洲成在人线免费视频| 国产精品成久久久久| 欧美色黄视频| 欧美一级一区二区三区| 亚洲优女在线| www.午夜| 国产精品自拍偷拍| 偷窥国产亚洲免费视频| 亚洲成a人片综合在线| 在线看国产日韩| 国产对白叫床清晰在线播放| 久久九九亚洲综合| 好看的视频你懂的| 国产精品无码人妻一区二区在线| 日本wwwcom| 欧洲亚洲精品在线| 精品国产一区二区三区不卡蜜臂|