time 
设为首页】【收藏本站

2018年白小姐正版先锋诗: 白小姐彩图

当前位置: 白小姐彩图 > JAVA > Java高级 > 设计模式 > Java设计模式分析之组合(Composite)

Java设计模式分析之组合(Composite)

时间:2014-06-18 15:30 点击:4722次 字体:[ ]




白小姐彩图 www.5vq5o.cn 听说你们公司最近新推出了一款电子书阅读应用,市场反应很不错,应用里还有图书商城,用户可以在其中随意选购自己喜欢的书籍。你们公司也是对此项目高度重视,加大了投入力度,决定给此应用再增加点功能。

好吧,你也知道你是逃不过此劫了,没过多久你的leader就找到了你。他告诉你目前的应用对每本书的浏览量和销售量做了统计,但现在想增加对每个书籍分类的浏览量和销售量以及所有书籍总的浏览量和销售量做统计的功能,希望你可以来完成这项功能。

领导安排的工作当然是推脱不掉的,你只能硬着头皮上了,不过好在这个功能看起来也不怎么复杂。

你比较喜欢看小说,那么就从小说类的统计功能开始做起吧。首先通过getAllNovels方法可以获取到所有的小说名,然后将小说名传入getBrowseCount方法可以得到该书的浏览量,将小说名传入getSaleCount方法可以得到该书的销售量。你目前只有这几个已知的API可以使用,那么开始动手吧!

  1. public int getNovelsBrowseCount() {  
  2.     int browseCount = 0;  
  3.     List<String> allNovels = getAllNovels();  
  4.     for (String novel : allNovels) {  
  5.         browseCount += getBrowseCount(novel);  
  6.     }  
  7.     return browseCount;  
  8. }  
  9.  
  10. public int getNovelsSaleCount() {  
  11.     int saleCount = 0;  
  12.     List<String> allNovels = getAllNovels();  
  13.     for (String novel : allNovels) {  
  14.         saleCount += getSaleCount(novel);  
  15.     }  
  16.     return saleCount;  
  17. }  

很快你就写下了以上两个方法,这两个方法都是通过获取到所有的小说名,然后一一计算每本小说的浏览量和销售量,最后将结果相加得到总量。

 

小说类的统计就完成了,然后你开始做计算机类书籍的统计功能,代码如下所示:

  1. public int getComputerBooksBrowseCount() {  
  2.     int browseCount = 0;  
  3.     List<String> allComputerBooks = getAllComputerBooks();  
  4.     for (String computerBook : allComputerBooks) {  
  5.         browseCount += getBrowseCount(computerBook);  
  6.     }  
  7.     return browseCount;  
  8. }  
  9.  
  10. public int getComputerBooksSaleCount() {  
  11.     int saleCount = 0;  
  12.     List<String> allComputerBooks = getAllComputerBooks();  
  13.     for (String computerBook : allComputerBooks) {  
  14.         saleCount += getSaleCount(computerBook);  
  15.     }  
  16.     return saleCount;  
  17. }  

除了使用了getAllComputerBooks方法获取到所有的计算机类书名,其它的代码基本和小说统计中的是一样的。

 

现在你才完成了两类书籍的统计功能,后面还有医学类、自然类、历史类、法律类、政治类、哲学类、旅游类、美食类等等等等书籍。你突然意识到了一些问题的严重性,工作量大倒还不算什么,但再这么写下去,你的方法就要爆炸了,这么多的方法让人看都看不过来,别提怎么使用了。

这个时候你只好向你的leader求助了,跟他说明了你的困惑。只见你的leader思考了片刻,然后自信地告诉你,使用组合模式不仅可以轻松消除你的困惑,还能出色地完成功能。

他立刻向你秀起了编码操作,首先定义一个Statistics接口,里面有两个待实现方法:

  1. public interface Statistics {  
  2.  
  3.     int getBrowseCount();  
  4.       
  5.     int getSalesCount();  
  6.  
  7. }  

然后定义一个用于统计小说类书籍的NovelStatistics类,实现接口中定义的两个方法:

  1. public class NovelStatistics implements Statistics {  
  2.  
  3.     @Override 
  4.     public int getBrowseCount() {  
  5.         int browseCount = 0;  
  6.         List<String> allNovels = getAllNovels();  
  7.         for (String novel : allNovels) {  
  8.             browseCount += getBrowseCount(novel);  
  9.         }  
  10.         return browseCount;  
  11.     }  
  12.  
  13.     @Override 
  14.     public int getSalesCount() {  
  15.         int saleCount = 0;  
  16.         List<String> allNovels = getAllNovels();  
  17.         for (String novel : allNovels) {  
  18.             saleCount += getSaleCount(novel);  
  19.         }  
  20.         return saleCount;  
  21.     }  
  22.  
  23. }  

在这两个方法中分别统计了小说类书籍的浏览量和销售量。那么同样的方法,你的leader又定义了一个ComputerBookStatistics类用于统计计算机类书籍的浏览量和销售量:

  1. public class ComputerBookStatistics implements Statistics {  
  2.  
  3.     @Override 
  4.     public int getBrowseCount() {  
  5.         int browseCount = 0;  
  6.         List<String> allComputerBooks = getAllComputerBooks();  
  7.         for (String computerBook : allComputerBooks) {  
  8.             browseCount += getBrowseCount(computerBook);  
  9.         }  
  10.         return browseCount;  
  11.     }  
  12.  
  13.     @Override 
  14.     public int getSalesCount() {  
  15.         int saleCount = 0;  
  16.         List<String> allComputerBooks = getAllComputerBooks();  
  17.         for (String computerBook : allComputerBooks) {  
  18.             saleCount += getSaleCount(computerBook);  
  19.         }  
  20.         return saleCount;  
  21.     }  
  22.  
  23. }  

这样将具体的统计实现分散在各个类中,就不会再出现你刚刚那种方法爆炸的情况了。不过这还没开始真正使用组合模式呢,好戏还在后头,你的leader吹嘘道。



本文地址 : //www.5vq5o.cn/plus/view-215096-1.html
标签: java 设计模式 Composite 组合
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:

  • Valentino 2017秋冬高级定制大秀 2018-09-08
  • 中国经济充当了世界经济发展的火车头。但是,作为世界经济火车头的中国,在世界主要经济体股市都走牛的情况下,为何熊途漫漫?这种不正常的现象,背后是我们资本市场的投融 2018-07-14
  • 别空谈,说说看,这个“简单的逻辑关系”是什么关系? 2018-07-13
  • “讲课带着泥土味,我们都爱听” 2018-07-13
  • 习近平:绿水青山就是金山银山 2018-07-12
  • 端午思屈原,为什么《橘颂》是一篇伟大的作品 2018-07-11
  • 2018年焉耆县旅游美食文化推介会在库尔勒市举行 2018-07-10
  • 《中国气候变化蓝皮书》:年平均气温显著上升 2018-07-10
  • 24小时智能无人便利店落户唐山 2018-07-09
  • 理货员忙不过来 宁波球迷把啤酒销量喝成井喷状态 2018-07-09
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2018-07-08
  • 易烊千玺押中高考作文题?不仅会押,今年还唱过! 2018-07-07
  • 【北京达世行世纪车型报价】北京达世行世纪4S店车型价格 2018-07-06
  • 欢迎访问《北京体育大学学报》编辑部网站 2018-07-05
  • 282| 444| 432| 310| 450| 243| 177| 398| 953| 45|