Java设计模式之 — 组合(Composite)】的更多相关文章

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153753 听说你们公司最近新推出了一款电子书阅读应用,市场反应很不错,应用里还有图书商城,用户可以在其中随意选购自己喜欢的书籍.你们公司也是对此项目高度重视,加大了投入力度,决定给此应用再增加点功能. 好吧,你也知道你是逃不过此劫了,没过多久你的leader就找到了你.他告诉你目前的应用对每本书的浏览量和销售量做了统计,但现在想增加对每个书籍分类的浏览量和销售量以及所有书籍总的…
组合模式:树状结构专用模式 代码如下: package com.srr.dp.composite; import java.util.ArrayList; import java.util.List; /** * 节点抽象 */ abstract class Node { private int id; public Node(int id){ this.id = id; } /** * 打印 */ abstract public void print(); } /** * 叶子节点 */ cl…
组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 "组合对象" 的含义.组合模式可以让客户端像修改配置文件一样简单的完成本来需要流程控制语句来完成的功能.经典案例:系统目录结构,网站导航结构等.(百度百科) 组合模式UML图 组合模式代码 package com.roc.composite; /** * 公共对象声明 * @author l…
(文章翻译自Java Design Pattern: Composite) 组合模式相对来说是比较简单的,但是它在很多设计中被用到,比如SWT.Eclipse工作空间等等.它创建了一个可以通过唯一的方法访问的继承树. 类图 下面的代码实现了下面树的结构 Java 代码 import java.util.List; import java.util.ArrayList; //Component interface Component { public void show(); } //Compos…
一. 举例 这个样例是书上的,如果有一个公司的组结结构例如以下: 它的结构非常像一棵树,当中人力资源部和財务部是没有子结点的,详细公司才有子结点. 并且最关健的是,它的每一层结构非常相似. 代码实现例如以下: #include <iostream> #include <list> #include <string> using namespace std; //公司类,提供接口   class Company       {     public:     Compan…
组合模式实际上是一种树形数据结构.以windows目录系统举例,怎么样用java语言描述一个文件夹? 定义一个文件夹类,文件夹类中包含若干个子文件类和若干个文件类. 进一步抽象,把文件夹和文件都看做节点,于是一个文件夹就可以描述为一个节点类,包含若干个子节点. 我们看看组合模式的代码 // 抽象节点 public abstract class Node { protected String name; abstract void add(Node node); abstract void rem…
组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独的成分对象和由它们组合而成的合成对象同等看待. 抽象构建角色:一个抽象角色,给参加组合的对象规定一个接口,这个接口给出共有的接口及默认行为. 树叶构建角色:代表参加组合的树叶对象,没有子对象,定义参加组合的原始对象行为. 树枝构建角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为. 对于子…
目录 示例 组合模式 定义 意图 主要解决问题 优缺点 安全式和透明式的组合模式 安全式的合成模式的结构 透明式的合成模式的结构 老和尚和小和尚的故事 示例 有一个绘图系统,可以描绘各种图形,假设现在可以描绘线.长方形.圆形 定义一个抽象类,所有的图形继承此类,完成绘图: public abstract class Graphics { /** 绘图 */ public abstract void draw(); } 线.长方形.圆形分别实现上述抽象类: public class Line ex…
听说你们公司最近新推出了一款电子书阅读应用,市场反应很不错,应用里还有图书商城,用户可以在其中随意选购自己喜欢的书籍.你们公司也是对此项目高度重视,加大了投入力度,决定给此应用再增加点功能. 好吧,你也知道你是逃不过此劫了,没过多久你的leader就找到了你.他告诉你目前的应用对每本书的浏览量和销售量做了统计,但现在想增加对每个书籍分类的浏览量和销售量以及所有书籍总的浏览量和销售量做统计的功能,希望你可以来完成这项功能. 领导安排的工作当然是推脱不掉的,你只能硬着头皮上了,不过好在这个功能看起来…
思考题 我们不仅仅要支持多个菜单,升值还要支持菜单中的菜单.你如何处理这个新的设计需求? P355 [提示]在我们的新设计中,真正需要以下三点: P354 我们需要某种属性结构,可以容纳菜单.子菜单和菜单项 我们需要确定能够在每个菜单的各个项之间游走,而且至少要像现在用迭代器一样方便 我们也需要能够更有弹性地在菜单项之间游走.比方说,可能只需要遍历甜点菜单,或者可以遍历餐厅的整个菜单(包括甜点菜单在内) 提供一个接口,统一菜单和菜单项的超类 接口包含菜单和菜单项的共同方法,菜单中执行方法是依次执…