设计模式之组合模式
来源:互联网 发布:如何查看网址的端口号 编辑:程序博客网 时间:2024/06/05 06:54
组合模式可以用在树状结构的组合当中,把上下级对象抽象出一个基类,通过这个基类可以实现带分支的父节点,也可以实现单个末端节点。
基类用来提供添加和删除子分支的方法,尽管末端节点不需要添加分支,但还是把编辑子分支的方法统一放到基类当中省去判断节点种类。每个节点的职责可以直接抽象,或者添加一个默认实现:
public abstract class Component { String name; public Component(String name) { this.name = name; } abstract void add(Component component); abstract void remove(Component component); void function(int level) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < level; i++) { sb.append(" "); } sb.append(name); System.out.println(sb.toString()); }}
最基本的可以只定义两种类型的实现:
带有分支的实现:
public class ParentCompany extends Component { private List<Component> list = new ArrayList<>(); public ParentCompany(String name) { super(name); } @Override void add(Component component) { list.add(component); } @Override void remove(Component component) { list.remove(component); } @Override void function(int level) { super.function(level); level++; for (int i = 0; i < list.size(); i++) { list.get(i).function(level); } }}
不带分支的实现:
public class EndCompany extends Component { public EndCompany(String name) { super(name); } @Override void add(Component component) { } @Override void remove(Component component) { }}
测试类:
public class Main { public static void main(String[] args) { final ParentCompany country = new ParentCompany("国家级总公司"); final ParentCompany province = new ParentCompany("省级总公司"); final EndCompany provinceEnd = new EndCompany("省级办事处"); final ParentCompany city = new ParentCompany("市级总公司"); final EndCompany cityEnd1 = new EndCompany("市级办事处1"); final EndCompany cityEnd2 = new EndCompany("市级办事处2"); final EndCompany townEnd = new EndCompany("镇级办事处"); country.add(province); country.add(provinceEnd); province.add(city); province.add(cityEnd1); province.add(cityEnd2); city.add(townEnd); country.function(0); }}
输出:
国家级总公司 省级总公司 市级总公司 镇级办事处 市级办事处1 市级办事处2 省级办事处
对于更复杂的情况可以进一步派生不同的实现,细分更多的分支和终端节点。
阅读全文
0 0
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之--组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之---组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之-------------组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- 设计模式 之 组合模式
- 设计模式之组合模式
- 设计模式之组合模式
- Java实现敏感词过滤
- 常见类---Arrays类
- TCP中已有SO_KEEPALIVE选项,为什么还要在应用层加入心跳包机制??
- I/O:读和写
- redhat忘记root密码的解决方法
- 设计模式之组合模式
- 这里没有key
- hdu 4366(线段树+DFS序)
- 关于springMVC操作
- Nim博弈论变型
- 萌新的linux之旅16
- HDU
- 数据结构之排序(二)
- JS应用将用户名和密码保存至localStorage