定义
将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
解决的问题
让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。
实现这个目标的关键就是设计一个抽象的组件类,让它可以代表组合对象和叶子对象。
模式结构
Component:组合中的对象声明接口,在适当情况下,实现所有类共有接口的行为。声明一个接口用于访问和管理Component的子部件
Leaf:叶节点对象,叶节点没有子节点。由于叶节点不能增加分支和树叶,所以叶节点的Add和Remove没有实际意义。
Composite:实现Componet的相关操作,比如Add和Remove操作。有叶节点行为,用来存储叶节点集合
children:用来存储叶节点集合
源代码
public abstract class Component {
protected String name;
public abstract void add(Component component);
public abstract void remove(Component component);
public abstract void dispaly(int depth);
}
public class Leaf extends Component {
public Leaf(String name){
this.name=name;
}
@Override
public void add(Component component) {
System.out.println("不能向叶子节点添加子节点");
}
@Override
public void remove(Component component) {
System.out.println("叶子节点没有子节点");
}
@Override
public void dispaly(int depth) {
StringBuilder builder=new StringBuilder("");
for(int i=0;i<depth;i++){
builder.append("-");
}
System.out.println(builder.toString()+name);
}
}
import java.util.ArrayList;
import java.util.List;
public class Composite extends Component {
private List<Component> children;
public Composite(String name){
this.name=name;
if(children==null){
children=new ArrayList<Component>();
}
}
@Override
public void add(Component component) {
children.add(component);
}
@Override
public void remove(Component component) {
children.remove(component);
}
@Override
public void dispaly(int depth) {
StringBuilder builder=new StringBuilder("");
for(int i=0;i<depth;i++){
builder.append("-");
}
System.out.println(builder.toString()+name);
for(Component component:children){
component.dispaly(depth+2);
}
}
}
public class Client {
public static void main(String[] args) {
Component root=new Composite("计算机技术");
Component c1=new Composite("编程技术");
Component c2=new Composite("数据库技术");
Component c1_1=new Leaf("Java");
Component c1_2=new Leaf("C#");
c1.add(c1_1);
c1.add(c1_2);
Component c2_1=new Leaf("MySQL");
Component c2_2=new Leaf("Oracle");
c2.add(c2_1);
c2.add(c2_2);
root.add(c1);
root.add(c2);
root.dispaly(1);
}
}
输出结果
-计算机技术
---编程技术
-----Java
-----C#
---数据库技术
-----MySQL
-----Oracle
分享到:
相关推荐
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...
本文实例讲述了PHP设计模式:组合模式Composite。分享给大家供大家参考,具体如下: 1. 概述 在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面。 例子1:就是多级树形菜单。 例子2:文件和...
将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
设计模式C++学习之组合模式(Composite)
15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21、中介者模式 22、解释器模式 23、亨元模式 24、备忘录模式
组合模式(Composite Pattern)是一种对象结构型模式,其定义是将多个对象组合成树形结构以表示“整体-部分”关系的层次结构。它使得客户端对单个对象和组合对象的使用具有一致性。在组合模式中,对象被组织成树形...
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...
C++设计模式课件20_Composite_组合模式.pdf
主要为大家详细介绍了java设计模式之组合模式Composite,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
组合模式 Composite , 将对象组组合成树形结构以表示'部分-整体' 的层次结构.组合模式使得用户对单个对象的组合对象的使用具有一致性
主要为大家详细介绍了C++设计模式之组合模式Composite,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式的适用场合是,一般当你发现需求中是体现部分与整体层次的结构时,...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第9节:结构型模式Composite组合模式
C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) 体验课程
c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...
主要介绍了Java设计模式之组合模式(Composite模式)介绍,Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性,需要的朋友可以参考下
使用组合模式有如下的好处: l 定义了饱含基本对象和组合对象的类层次结构,基本对象可以被组合成更复杂的组合对象,而这个组合对象有可以被组合。 简化客户代码 客户可以一直地使用组合结构和单个对象,通常用户不...
Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现