首页 > 学院 > 开发设计 > 正文

详解组合模式的结构及其在Ruby设计模式编程中的运用

2019-10-26 19:28:55
字体:
来源:转载
供稿:网友

定义:也叫合成模式,或者部分-整体模式,主要是用来描述部分与整体的关系,定义,将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

类图:

2016316161807337.jpg (431×346)

角色说明:

Componnent抽象构件角色:定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性。
Leaf叶子构件:叶子对象,其下再也没有其他的分支,也就是遍历的最小单位。
Composite树枝构件:树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构。

实例:
听说你们公司最近新推出了一款电子书阅读应用,市场反应很不错,应用里还有图书商城,用户可以在其中随意选购自己喜欢的书籍。你们公司也是对此项目高度重视,加大了投入力度,决定给此应用再增加点功能。
好吧,你也知道你是逃不过此劫了,没过多久你的leader就找到了你。他告诉你目前的应用对每本书的浏览量和销售量做了统计,但现在想增加对每个书籍分类的浏览量和销售量以及所有书籍总的浏览量和销售量做统计的功能,希望你可以来完成这项功能。
领导安排的工作当然是推脱不掉的,你只能硬着头皮上了,不过好在这个功能看起来也不怎么复杂。
你比较喜欢看小说,那么就从小说类的统计功能开始做起吧。首先通过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 

很快你就写下了以上两个方法,这两个方法都是通过获取到所有的小说名,然后一一计算每本小说的浏览量和销售量,最后将结果相加得到总量。
小说类的统计就完成了,然后你开始做计算机类书籍的统计功能,代码如下所示:

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             
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表