将对象组合成树形结构
以表示部分和整体的层次结构.
组合模式使得用户对单个对象和组合对象的适用具有一致性.
组合模式是将对象之间的关系以数据结构中的2
叉树表现出来,使得客户端将单纯的元素与复杂元素同等看待,这样的话使得用户在操作不同的子类元素时可以和根节点元素一样操作,在透明模式下即根元素和叶元素公用同一个接口达到共同的结果。
组合模式就是解决部分与整体的关系的一种模式。
意图
:
将对象组合成树形结构以表示“整体
-
部分”的层次结构。
Composite
使得用户对单个对象和组合对象的使用具有一致性
动机
:
客户代码过多的依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(非抽象接口)的变化将引起客户代码的频繁变化代码的代码维护和扩展的困难,我们需要将客户代码与复杂的对象容器结构解偶。
适用性
:
l
想表示对象的部分
-
整体层次结构
l
希望用户忽略组合对象与单个对象的不同
,用户将统一地使用组合结构中的所有对象。
结构
:
参与者
:
l
抽象构件(
Component
)角色
(
IComposite
)
l
树叶构件(
Leaf
)角色
(Employees
)
l
树枝构件
(Boss)
Composite
模式的优点
:
1.
客户代码不依赖复杂对象本身的结构变化
2.
用户不需要特别关心复杂对象的具体结构只要等同于根对象操作
先用一个普通的例子来解释一下组合模式. 一个很大的集团公司, 在各个大区开有分公司, 在小地区开有办事处, 一个经理,可以在办事处开展业务,
也可以在分公司工作, 还可以在总公司工作, 这是因为, 不管是总公司, 分公司, 还是办事处, 经理的工作模式基本相同, 而且总公司,
分公司和办事处的外部结构也很相似, 任何一个经过培训的经理, 都可以在总公司, 分公司或办事处工作. 这是因为分公司,
总公司在管理上具有一致的接口.
再举一例, 文件系统中有文件, 也有文件夹(其实是特殊的文件), 文件和文件夹组合在一起,
可以成为一个更大的文件夹. 在用户看来,不管是文件, 还是文件夹, 还是更目录,
对它们的操作都是一致的(当然试图把一个文件夹放到文件下面是不容许的). 这就是说整体和部分具有一致的接口.
//公共接口
package designpattern.composite;
public interface Component {
public void add(Component c);
public void remove(Component c);
public void display(int depth);
}
//叶子节点
public class Leaf implements Component{
private String name;
public Leaf(String n){
this.name = n;
}
public void add(Component c) {
System.out.println("leaf node can't add sub component.");
}
public void display(int depth) {
String sketon = "";
for(int i=0; i<depth; i++){
sketon += "-";
}
System.out.println(sketon + name);
}
public void remove(Component c) {
System.out.println("leaf node can't remove sub component.");
}
}
//枝节点
public class Composite implements Component{
List<Component> children = new ArrayList<Component>();
private String name;
public Composite(String name){
this.name = name;
}
public void add(Component c) {
children.add(c);
}
public void remove(Component c) {
children.remove(c);
}
public void display(int depth) {
String sketon = "";
for(int i=0; i<depth; i++){
sketon += "-";
}
System.out.println(sketon + name);
for(Component c : children){
c.display(depth + 2);
}
}
}
//测试用例 使用组合模式构造windows系统c盘目录结构
public class Test {
public static void main(String[] args){
Component root = new Composite("C:\\");
Component programs = new Composite("Program Files");
programs.add(new Leaf("360杀毒"));
programs.add(new Leaf("Office 2007"));
programs.add(new Leaf("Movie Maker"));
Component windows = new Composite("Windows");
windows.add(new Leaf("system"));
windows.add(new Leaf("system32"));
windows.add(new Leaf("temp"));
Component autoexec = new Leaf("AUTOEXEC.BAT");
Component boot = new Leaf("boot.ini");
root.add(programs);
root.add(windows);
root.add(autoexec);
root.add(boot);
root.display(0);
}
}
以上程序的最后输出:
C:\
--Program Files
----360杀毒
----Office 2007
----Movie Maker
--Windows
----system
----system32
----temp
--AUTOEXEC.BAT
--boot.ini
适用情景: 当部分和整体呈现层次结构, 并且用户希望在操作上忽略部分和整体的差异时. 也就是说组合模式让客户可以一致的适用组合结构和单个对象.
来源:http://blog.csdn.net/sunxing007/archive/2010/03/28/5425737.aspx
参考:http://blog.csdn.net/fanweiwei/archive/2008/02/26/2121336.aspx
- 大小: 35.4 KB
分享到:
相关推荐
C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) 体验课程
C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) (Level 300)
设计模式C++学习之组合模式(Composite)
将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。
组合模式(Composite Pattern)是一种对象结构型模式,其定义是将多个对象组合成树形结构以表示“整体-部分”关系的层次结构。它使得客户端对单个对象和组合对象的使用具有一致性。在组合模式中,对象被组织成树形...
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...
2.2.3 组合模式 27 2.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 compositor和composition 27 2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 monoglyph 30 2.4.3 decorator 模式 32 2.5...
C++设计模式课件20_Composite_组合模式.pdf
[GOF《设计模式》]图1Composite模式结构图组合模式将对象组合成树形结构以表示"部分-整体"的层次结构。让用户一致地使用单个对象和组合对象。虽然例子抽象一些,但是算术表达式确实是组合的例子。算术表达式包括操作...
组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 组合模式的适用场合是,一般当你发现需求中是体现部分与整体层次的结构时,...
http://blog.csdn.net/fanweiwei/archive/2008/02/26/2121336.aspx
主要介绍了Java设计模式之组合模式(Composite模式)介绍,Composite定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性,需要的朋友可以参考下
c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...
设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...
6、组合模式【Composite】 7、享元模式【Flyweight】 三、行为型模式 1、模板方法模式【Template Method】 2、观察者模式【Observer】 3、状态模式【State】 4、策略模式【Strategy】 5、职责链模式【Chain of ...
主要为大家详细介绍了java设计模式之组合模式Composite,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
使用组合模式有如下的好处: l 定义了饱含基本对象和组合对象的类层次结构,基本对象可以被组合成更复杂的组合对象,而这个组合对象有可以被组合。 简化客户代码 客户可以一直地使用组合结构和单个对象,通常用户不...