设计模式学习笔记——组合模式
2014-07-18 16:58
274 查看
原文:http://blog.csdn.net/hackerain/article/details/7563915
定义:
将对象组合成树形结构以表示“部分—整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
组合模式主要用来处理一些具有“容器特征”的对象,即他们在充当对象的同时,又可以作为容器包含其他的多个对象。也就是说组合模式表达的是一种树形的结构,将数据结构中的“树”,用面向对象的方式表现出来了,而且表达的是一种多叉树。
看如下的通用类图:
源代码如下:
[java] view
plaincopy
/*
* 抽象节点,定义所有节点的共性
*/
public abstract class Component {
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
[java] view
plaincopy
/*
* 叶节点,相当于单个对象
*/
public class Leaf extends Component {
}
[java] view
plaincopy
/*
* 分支节点,相当于组合对象
*/
public class Branch extends Component {
private ArrayList<Component> components=new ArrayList<Component>();
public void add(Component component){
this.components.add(component);
}
public void remove(Component component){
this.components.remove(component);
}
public ArrayList<Component> getChildren(){
return this.components;
}
}
[java] view
plaincopy
public class Client {
public static void main(String[] args) {
//定义根节点
Branch root=new Branch();
root.setData("root");
//分支1
Branch branch1=new Branch();
branch1.setData("branch1");
//分支2
Branch branch2=new Branch();
branch2.setData("branch2");
//叶节点1
Leaf leaf1=new Leaf();
leaf1.setData("leaf1");
//叶节点2
Leaf leaf2=new Leaf();
leaf2.setData("leaf2");
//叶节点3
Leaf leaf3=new Leaf();
leaf3.setData("leaf3");
//叶节点4
Leaf leaf4=new Leaf();
leaf4.setData("leaf4");
root.add(branch1);
root.add(branch2);
root.add(leaf1);
branch1.add(leaf2);
branch2.add(leaf3);
branch2.add(leaf4);
display(root);
}
//遍历树,输出数据
public static void display(Branch root){
for(Component b : root.getChildren()){
if(b instanceof Leaf){
System.out.println(b.getData());
}
else{
System.out.println(b.getData());
display((Branch)b);
}
}
}
}
组合模式的优点:
1、一个树形结构中所有节点都是Component,局部和整体对调用者来说没有区别,高层模块不必关心自己处理的是单个对象还是整个组合结构,简化了高层模块的代码。
2、节点增加自由
后序:
对这个模式现在还不是很理解,这不就是树结构的面向对象的表示吗?还有其他的什么深意吗?有待于通过实践加深理解。
定义:
将对象组合成树形结构以表示“部分—整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
组合模式主要用来处理一些具有“容器特征”的对象,即他们在充当对象的同时,又可以作为容器包含其他的多个对象。也就是说组合模式表达的是一种树形的结构,将数据结构中的“树”,用面向对象的方式表现出来了,而且表达的是一种多叉树。
看如下的通用类图:
源代码如下:
[java] view
plaincopy
/*
* 抽象节点,定义所有节点的共性
*/
public abstract class Component {
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
[java] view
plaincopy
/*
* 叶节点,相当于单个对象
*/
public class Leaf extends Component {
}
[java] view
plaincopy
/*
* 分支节点,相当于组合对象
*/
public class Branch extends Component {
private ArrayList<Component> components=new ArrayList<Component>();
public void add(Component component){
this.components.add(component);
}
public void remove(Component component){
this.components.remove(component);
}
public ArrayList<Component> getChildren(){
return this.components;
}
}
[java] view
plaincopy
public class Client {
public static void main(String[] args) {
//定义根节点
Branch root=new Branch();
root.setData("root");
//分支1
Branch branch1=new Branch();
branch1.setData("branch1");
//分支2
Branch branch2=new Branch();
branch2.setData("branch2");
//叶节点1
Leaf leaf1=new Leaf();
leaf1.setData("leaf1");
//叶节点2
Leaf leaf2=new Leaf();
leaf2.setData("leaf2");
//叶节点3
Leaf leaf3=new Leaf();
leaf3.setData("leaf3");
//叶节点4
Leaf leaf4=new Leaf();
leaf4.setData("leaf4");
root.add(branch1);
root.add(branch2);
root.add(leaf1);
branch1.add(leaf2);
branch2.add(leaf3);
branch2.add(leaf4);
display(root);
}
//遍历树,输出数据
public static void display(Branch root){
for(Component b : root.getChildren()){
if(b instanceof Leaf){
System.out.println(b.getData());
}
else{
System.out.println(b.getData());
display((Branch)b);
}
}
}
}
组合模式的优点:
1、一个树形结构中所有节点都是Component,局部和整体对调用者来说没有区别,高层模块不必关心自己处理的是单个对象还是整个组合结构,简化了高层模块的代码。
2、节点增加自由
后序:
对这个模式现在还不是很理解,这不就是树结构的面向对象的表示吗?还有其他的什么深意吗?有待于通过实践加深理解。
相关文章推荐
- 设计模式学习笔记-组合模式
- java 设计模式学习笔记八 composite组合模式
- 设计模式之禅学习笔记--组合模式
- 设计模式学习笔记十七:组合模式(Composite Pattern)
- 设计模式学习笔记-组合模式
- 步步为营 .NET 设计模式学习笔记 十五、Composite(组合模式)
- 《Head First 设计模式》学习笔记:迭代器模式与组合模式
- 设计模式学习笔记——组合模式
- 设计模式学习笔记Composite组合模式
- 设计模式学习笔记之组合模式模式
- 设计模式学习笔记:组合模式
- C#面向对象设计模式学习笔记(8) - Composite 组合模式(结构型模式)
- 设计模式学习笔记之组合模式
- android设计模式学习笔记02--组合模式
- java 设计模式 学习笔记(15) 组合模式
- 设计模式学习笔记——组合模式
- 设计模式学习笔记-组合模式(转载)
- 设计模式学习笔记(组合模式)
- 设计模式学习笔记二十四:优雅的菜单 - 组合模式
- 【设计模式学习笔记九】【结构型模式】【组合模式(Composite)】