组合模式
来源:互联网 发布:centos yum安装包下载 编辑:程序博客网 时间:2024/05/22 15:34
组合模式:将对象组成树形结构以表示部分与整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
实例
Component.java
/** * @author Carl_Hugo * 声明一个接口用于访问和管理Component子部件 */public abstract class Component { protected String name; public Component(String name){ this.name=name; } //用于增加删除子部件 public abstract void add(Component component); public abstract void remove(Component component); public abstract void display(int depth);}
Leaf.java
/** * 在组合中表示叶子节点 * @author Carl_Hugo */public class Leaf extends Component{ public Leaf(String name) { super(name); } /** * 叶子节点没有子节点 */ @Override public void add(Component component) { System.out.println("Can not add to a leaf!"); } @Override public void remove(Component component) { System.out.println("Can not remove from a leaf"); } @Override public void display(int depth) { String str=""; for(int i=0;i<depth;i++){ str+='-'; } System.out.println(str+name); }}
Composite.java
/** * Composite定义有枝节点行为,用于存储子部件(与叶子节点不同) * @author Carl_Hugo * */public class Composite extends Component{ private List<Component> children=new ArrayList<Component>(); public Composite(String name) { super(name); } @Override public void add(Component component) { children.add(component); } @Override public void remove(Component component) { children.remove(component); } @Override public void display(int depth) { String str=""; for(int i=0;i<depth;i++){ str+='-'; } System.out.println(str+name); for(Component c:children){ c.display(depth+2); } }}
Test.java
public class Test { public static void main(String[] args) { Composite root = new Composite("root"); root.add(new Leaf("Leaf A")); root.add(new Leaf("Leaf B")); Composite comp = new Composite("Composite X"); comp.add(new Leaf("Leaf XA")); comp.add(new Leaf("Leaf XB")); root.add(comp); Composite comp2 = new Composite("Component XY"); comp2.add(new Leaf("Leaf XYA")); comp2.add(new Leaf("Leaf XYB")); comp.add(comp2); root.add(new Leaf("Leaf C")); Leaf leaf = new Leaf("Leaf D"); root.add(leaf); root.remove(leaf); root.display(1); }}
公司管理
Company.java
/** * 公司类,抽象接口 * @author Carl_Hugo * */public abstract class Company { protected String name; public Company(String name){ this.name=name; } public abstract void add(Company c); public abstract void remove(Company c); public abstract void display(int depth); //履行职责 public abstract void lineOfDuty();}
ConcreteCompany.java
/** * 具体公司类,实现接口 * @author Carl_Hugo */public class ConcreteCompany extends Company{ private List<Company> children=new ArrayList<Company>(); public ConcreteCompany(String name) { super(name); } @Override public void add(Company c) { children.add(c); } @Override public void remove(Company c) { children.remove(c); } @Override public void display(int depth) { String str=""; for(int i=0;i<depth;i++){ str+='-'; } System.out.println(str+name); for(Company c:children){ c.display(depth+2); } } @Override public void lineOfDuty() { for(Company c:children){ c.lineOfDuty(); } }}
FinanceDepartment.java
/** * 财务部,树叶节点 * @author Carl_Hugo */ public class FinanceDepartment extends Company{ public FinanceDepartment(String name) { super(name); } @Override public void add(Company c) { } @Override public void remove(Company c) { } @Override public void display(int depth) { String str=""; for(int i=0;i<depth;i++){ str+='-'; } System.out.println(str+name); } @Override public void lineOfDuty() { System.out.println(name+"公司财务收支管理"); }}
HRDepartment.java
/** * 人力资源部,树叶节点 * @author Carl_Hugo */public class HRDepartment extends Company{ public HRDepartment(String name) { super(name); } @Override public void add(Company c) { } @Override public void remove(Company c) { } @Override public void display(int depth) { String str=""; for(int i=0;i<depth;i++){ str+='-'; } System.out.println(str+name); } @Override public void lineOfDuty() { System.out.println(name+"员工招聘管理培训"); }}
Test.java
package zx.compositepattern.test2;public class Test { public static void main(String[] args) { ConcreteCompany root = new ConcreteCompany("北京总公司"); root.add(new HRDepartment("总公司人力资源部")); root.add(new FinanceDepartment("总公司财务部")); ConcreteCompany comp = new ConcreteCompany("上海华东分公司"); comp.add(new HRDepartment("华东分公司人力资源部")); comp.add(new FinanceDepartment("华东分公司财务部")); root.add(comp); ConcreteCompany comp1 = new ConcreteCompany("南京办事处"); comp1.add(new HRDepartment("南京办事处人力资源部")); comp1.add(new FinanceDepartment("南京办事处财务部")); comp.add(comp1); ConcreteCompany comp2 = new ConcreteCompany("杭州办事处"); comp2.add(new HRDepartment("杭州人力资源部")); comp2.add(new FinanceDepartment("杭州财务部")); comp.add(comp2); System.out.println("===结构图==="); root.display(1); System.out.println("=======职责======"); root.lineOfDuty(); }}
0 0
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 关于iframe跨页面设置高度
- 终端常用命令
- JSP&Servlet学习笔记----第4章
- 短作业优先算法的缺点
- 解决jquery submit()提交表单提示 e[h] is not a function
- 组合模式
- Map与HashMap和Set的区别
- Weex入门教程之8,关注weex-toolkit命令变更
- Android基础以及进阶之路
- mapjoin解析
- 浅析一下火绒杀毒
- java弹出一个简单的文本框
- Android初始基础
- 实验报告模板