java设计模式--组合模式
来源:互联网 发布:监控软件手机版 编辑:程序博客网 时间:2024/06/06 16:53
组合模式就是将对象组合成树状结构,主要由抽象组件类或者接口、组合组件以及叶子组件组成。
1. 抽象组件类(也可以用接口来实现)
package demo.design.zuhe;
//抽象组件类或接口
public abstract class Component {
protected String name;
public Component(String s){
this.name = s;
}
public abstract void add(Component c);
public abstract void remove(Component c);
public abstract void test();
}
2. 组合组件
package demo.design.zuhe;
import java.util.ArrayList;
import java.util.List;
//组合构件
public class Composite extends Component{
public Composite(String s) {
super(s);
}
private List<Component> list = new ArrayList<Component>();
@Override
public void add(Component c) {
list.add(c);
}
@Override
public void remove(Component c) {
list.remove(c);
}
@Override
public void test() {
System.out.println("节点名:\t" + this.name);
for (Component c : list) {
c.test();
}
}
}
3. 叶子组件
package demo.design.zuhe;
//叶子构件
public class Leaf extends Component{
public Leaf(String name) {
super(name);
}
//叶子没有不用实现add 和 remove 方法。
@Override
public void add(Component c) {
}
@Override
public void remove(Component c) {
}
@Override
public void test() {
System.out.println("执行方法!"+ this.name);
}
}
4. 测试
package demo.design.zuhe;
public class ComponentTest {
public static void main(String[] args) {
Composite root = new Composite("root");
Component leaf1 = new Leaf("叶子1");
Component leaf2 = new Leaf("叶子2");
Composite composite1 = new Composite("组件1");
Composite composite2 = new Composite("组件2");
composite1.add(leaf1);
composite1.add(leaf2);
root.add(composite1);
root.add(composite2);
root.test();
}
}
5.打印结果
节点名: root
节点名: 组件1
执行方法!叶子1
执行方法!叶子2
节点名: 组件2
从上例看,叶子节点重写了add 和 remove 的空方法,组合组件才需要添加或者删除叶子组件(组合组件)。组合模式中也可以将 add方法和 remove方法只放到组合组件中。
- JAVA设计模式 -- 组合模式
- JAVA设计模式:组合模式
- Java 设计模式-组合模式
- java设计模式-组合模式
- Java设计模式--组合模式
- Java设计模式--组合模式
- Java设计模式----组合模式
- JAVA设计模式(组合模式)
- JAVA设计模式--组合模式
- java设计模式--组合模式
- java设计模式--组合模式
- JAVA 设计模式 组合模式
- java设计模式---组合
- java设计模式--组合
- Java组合设计模式
- 设计模式--结构模式--组合模式--Java
- java设计模式之组合设计模式
- Java设计模式(6) -- 组合
- Linux/Android Kconfig Makefile defconfig 和 .config关系
- 【路在前端】我的前端工作流程梳理
- 16.1114 模拟考试T1
- LIBSVM的SMO算法(update alpha)
- oracle找不到sid的问题解决
- java设计模式--组合模式
- [Python模块学习]用imghdr模块识别图片格式
- Codevs 1021 玛丽卡==洛谷 P1186
- N级架构演化史
- NOIP 前夕 模板整理
- 16.1116 NOIP 考前模拟(信心题)
- Codevs 1215 迷宫
- Map集合的功能概述
- 16.1117 NOIP 模拟赛