先看一下结构图
2. 如果把Composite模式看成是树形结构的话,那么它主要角色有:
1)抽象构件角色(Component):该角色是一个抽象类,它定义了一些操作增删树叶(Leaf)的操作。
2)树枝构件角色(Composite):树枝上有很多树干,树枝也是树干的一种。
3)树叶构件角色(Leaf): 树枝上的树叶,也就是Component中的具体操作对象【注意没有,因为处在最末端 所有没有add和remove方法】
3. 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性【我觉得此处要重点理解,但是,我还没有完全理解】
好吧,上代码。
example: 某网刊有体育模块和国内新闻模块,体育模块下有CBA和NBA网站;国内新闻模块有上海地区新闻和江苏地区新闻
package designpattern.composite; /** * * 定义一个抽象树干类 * * @author king * */ public abstract class Component { public String name;//组件的名字 public Component(String name){ this.name=name; } //加入组件 abstract void add(Component component); //删除组件 abstract void remove(Component component); //组件方法 abstract void operation(Component component); }
package designpattern.composite; import java.util.ArrayList; import java.util.List; /** * * 树枝角色类 * * @author king * */ public class Composite extends Component{ private List<Component> components = null; public Composite(String name) { super(name); components = new ArrayList<Component>(); } void add(Component component) { components.add(component); } void remove(Component component) { components.remove(component); } //就实现一个打印功能 void operation(Component component) { //枝干节点主要输出自己和自己的子结点 System.out.println(this.name); //如果存在枝节点,则打印枝节点 for(Component c : components){ //递归输出每个子对象 System.out.print("\t"); c.operation(c); } } }
package designpattern.composite; /** * * 叶子角色类 * * @author king * */ public class Leaf extends Component { public Leaf(String name) { super(name); } void add(Component component) { throw new UnsupportedOperationException("叶子角色类不支持这个功能"); } void remove(Component component) { throw new UnsupportedOperationException("叶子角色类不支持这个功能"); } //就实现一个打印功能 void operation(Component component) { //叶子结点只要输出自己 System.out.println("\t"+this.name); } }
package designpattern.composite; public class Client { public static void main(String[] args) { Component newsRoot = new Composite("新闻"); Component sportsNews = new Composite("体育新闻"); Component nbaNews = new Leaf("NBA"); Component cbaNews = new Leaf("CBA"); Component nationalNews = new Composite("国内新闻"); Component shanghaiNews = new Leaf("上海"); Component jiangsuNews = new Leaf("江苏"); sportsNews.add(nbaNews); sportsNews.add(cbaNews); nationalNews.add(shanghaiNews); nationalNews.add(jiangsuNews); newsRoot.add(nationalNews); newsRoot.add(sportsNews); newsRoot.operation(newsRoot); } }
代码写的比较匆忙,有些地方没有添加注释,抽时间补上吧。
设计模式,任重道远啊。
相关推荐
这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的...
设计模式_源代码大全.zip 包括:1.简单工厂模式 2.策略模式 3.装饰模式 4.代理模式 5.工厂方法模式 6.原型模式 7.模板方法模型 8.外观模式 9.建造者模式 10.观察者模式 11.抽象工厂模式 12.状态模式 13.适配器模式 ...
组合模式的例子代码,你值得拥有,好好学习,天天向上咯。
Java 23种设计模式12组合模式.pdf
40.设计模式之组合模式 41.设计模式之模板方法 42.设计模式之原型模式 43.设计模式之状态模式 44.设计模式之桥接模式 45.代码复用模式(避免篇) 46.代码复用模式(推荐篇) 47.对象创建模式(上篇) 48.对象创建...
文件类型为PDF文件,此文档对20多种java设计模式进行了详细讲解,在中文讲解的过程中还附有代码示例给学习者进行参考,使学习者通过实践更容易理解设计模式的原理。 本文档目录: 1.工厂模式 2.单例模式 3.建造...
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...
组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器...
设计模式实验报告
设计模式之禅之 组合模式 设计模式之禅之 组合模式 设计模式之禅之 组合模式 设计模式之禅之 组合模式
结构模式:设计模式之Facade(外观),设计模式之Proxy(代理),设计模式之Adapter(适配器),设计模式之Composite(组合),设计模式之Decorator(油漆工),设计模式之Bridge,设计模式之Flyweight(享元). 行为模式:设计模式之...
c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...
C# 32种设计模式: 创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) ...
总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式...
自己看书整理的23种设计模式的类图,集中起来方便看,也在这里保存一下,丢了不好,下面是为…… 1.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式观察者模式、策略模式、模板模式、责任链模式、解析器模式、迭代子模式 命令模式、状态模式、备忘录模式、访问者模式、中介者模式
这份文档以例子的形式讲诉了设计模式之迭代器与组合模式,希望可以帮助学习的人!
开篇.pdf 继承、封装、多态.pdf 备忘录模式.pdf 工厂模式.pdf ...组合模式.pdf 单件模式.pdf 解释器模式.pdf 享元模式.pdf 迭代器模式.pdf 原型模式.pdf 访问者模式.pdf 命令模式.pdf 责任链模式.pdf