Composite形式
Composite模式
将对象组合成树形结构以表示 部分-整体 的层次结构,使用户对单个对象和组合对象的使用具有一致性
适用场合:忽略组合对象与单个对象的不同,统一使用组合结构中的所有对象
Company.java
package com.gary.designpattern.composite; /** * 公司类 * @author gary * */ public abstract class Company { protected String name; public Company(){ } public Company(String name) { this.name = name; } public void printName(){ System.out.println(name); } //增 public abstract void add(Company company); //删 public abstract void delete(Company company); //查 public abstract void show(int depth); }
ConcreteCompany.java
package com.gary.designpattern.composite; import java.util.ArrayList; import java.util.List; /** * 存储子节点 * @author gary * */ public class ConcreteCompany extends Company { private List<Company> children = new ArrayList<Company>(); public ConcreteCompany(String name) { this.name = name; } @Override public void add(Company company) { children.add(company); } @Override public void delete(Company company) { children.remove(company); } @Override public void show(int depth) { for (int i = 0; i < depth; i++) { System.out.print("-"); } printName(); for (int i = 0; i < children.size(); i++) { children.get(i).show(depth + 1); } } }
DepartmentA.java
package com.gary.designpattern.composite; /** * 部门A * @author gary * */ public class DepartmentA extends Company { public DepartmentA(String name) { this.name = name; } /** * 叶子节点无子节点 */ @Override public void add(Company company) { } /** * 叶子节点无子节点 */ @Override public void delete(Company company) { } @Override public void show(int depth) { for (int i = 0; i < depth; i++) { System.out.print("-"); } printName(); } public void functionA(){ System.out.println("function A"); } }
DepartmentB.java
package com.gary.designpattern.composite; /** * 部门B * @author gary * */ public class DepartmentB extends Company { public DepartmentB(String name) { this.name = name; } /** * 叶子节点无子节点 */ @Override public void add(Company company) { } /** * 叶子节点无子节点 */ @Override public void delete(Company company) { } @Override public void show(int depth) { for (int i = 0; i < depth; i++) { System.out.print("-"); } printName(); } public void functionB(){ System.out.println("function B"); } }
DepartmentC.java
package com.gary.designpattern.composite; /** * 部门C * @author gary * */ public class DepartmentC extends Company { public DepartmentC(String name) { this.name = name; } /** * 叶子节点无子节点 */ @Override public void add(Company company) { } /** * 叶子节点无子节点 */ @Override public void delete(Company company) { } @Override public void show(int depth) { for (int i = 0; i < depth; i++) { System.out.print("-"); } printName(); } public void functionC(){ System.out.println("function C"); } }
Test.java
package com.gary.designpattern.composite; /** * 测试 * @author gary * */ public class Test { public static void main(String[] args) { ConcreteCompany root = new ConcreteCompany("总公司"); ConcreteCompany company1 = new ConcreteCompany("分公司1"); company1.add(new DepartmentA("分公司1部门1")); company1.add(new DepartmentB("分公司1部门2")); company1.add(new DepartmentC("分公司1部门3")); ConcreteCompany company2 = new ConcreteCompany("分公司2"); company2.add(new DepartmentA("分公司2部门1")); company2.add(new DepartmentB("分公司2部门2")); ConcreteCompany company3 = new ConcreteCompany("分公司3"); company3.add(new DepartmentA("分公司3部门1")); root.add(company1); root.add(company2); root.add(company3); root.show(1); } }