组合模式(Composite)——Java
2016-05-27 11:53
399 查看
Component:节点的抽象类
public abstract class Component {
public abstract void Operation();
public abstract void Add(Component c);
public abstract void Remove(Component c);
public abstract Component GetChild(int i);
}
Composite:组合体,如树一般,可包含叶子节点或子树
import java.util.ArrayList;
import java.util.List;
public class Composite extends Component {
// Composite由多个Component组成(聚合关系)
private List<Component> list = new ArrayList<Component>();
public void Operation() {
for (Component c : list) {
// 遍历所有子节点,并执行子节点的方法
c.Operation();
}
}
public void Add(Component c) {
list.add(c);
}
@Override
public void Remove(Component c) {
// TODO Auto-generated method stub
}
@Override
public Component GetChild(int i) {
// TODO Auto-generated method stub
return null;
}
}
Leaf:叶子节点
public class Leaf extends Component {
public void Operation() {
System.out.println("this is leaf");
}
@Override
public void Add(Component c) {
// TODO Auto-generated method stub
}
@Override
public void Remove(Component c) {
// TODO Auto-generated method stub
}
@Override
public Component GetChild(int i) {
// TODO Auto-generated method stub
return null;
}
}
Client:客户端,构造一个组合体,并遍历该组合体的所有叶子节点,如下图所示:
这个类很重要,这个类是否写正确,以及运行结果是否正确意味着对设计模式是否真正理解
public class Client {
public static void main(String[] args) {
Leaf leaf1 = new Leaf();// 叶子节点
Leaf leaf2 = new Leaf();
Leaf leaf3 = new Leaf();
Composite c = new Composite();// 子树节点,包含两个叶子节点
c.Add(leaf2);
c.Add(leaf3);
Composite composite = new Composite();// 树
composite.Add(c);
composite.Add(leaf1);
composite.Operation();// 遍历所有节点
}
}
public abstract class Component {
public abstract void Operation();
public abstract void Add(Component c);
public abstract void Remove(Component c);
public abstract Component GetChild(int i);
}
Composite:组合体,如树一般,可包含叶子节点或子树
import java.util.ArrayList;
import java.util.List;
public class Composite extends Component {
// Composite由多个Component组成(聚合关系)
private List<Component> list = new ArrayList<Component>();
public void Operation() {
for (Component c : list) {
// 遍历所有子节点,并执行子节点的方法
c.Operation();
}
}
public void Add(Component c) {
list.add(c);
}
@Override
public void Remove(Component c) {
// TODO Auto-generated method stub
}
@Override
public Component GetChild(int i) {
// TODO Auto-generated method stub
return null;
}
}
Leaf:叶子节点
public class Leaf extends Component {
public void Operation() {
System.out.println("this is leaf");
}
@Override
public void Add(Component c) {
// TODO Auto-generated method stub
}
@Override
public void Remove(Component c) {
// TODO Auto-generated method stub
}
@Override
public Component GetChild(int i) {
// TODO Auto-generated method stub
return null;
}
}
Client:客户端,构造一个组合体,并遍历该组合体的所有叶子节点,如下图所示:
这个类很重要,这个类是否写正确,以及运行结果是否正确意味着对设计模式是否真正理解
public class Client {
public static void main(String[] args) {
Leaf leaf1 = new Leaf();// 叶子节点
Leaf leaf2 = new Leaf();
Leaf leaf3 = new Leaf();
Composite c = new Composite();// 子树节点,包含两个叶子节点
c.Add(leaf2);
c.Add(leaf3);
Composite composite = new Composite();// 树
composite.Add(c);
composite.Add(leaf1);
composite.Operation();// 遍历所有节点
}
}
相关文章推荐
- Java 求一周前时间
- Eclipse SVN冲突解决
- spring framework源码下载并导入eclipse
- Java中Finally关键字
- eclipse 异常Unhandled event loop exception
- java对cookie的操作
- 深入理解java虚拟机(7)---线程安全 & 锁优化
- Ehcache详细解读
- java RSA加密解密实现
- (spring-第21回【MVC基础篇】)SpringMVC一点就通
- <JAVA学习笔记三>——集合
- Eclipse 中Android项目使用技巧:Android 快速更换包名
- java抽象类和接口的区别
- eclipse hana xs 开发环境搭建
- JAVA堆内存设置管理
- Java用freemarker导出word
- 对xml的操作-java版
- java中获取浏览器信息
- Java 多线程以及区别
- JAVA反射机制详解