读书人

Composite形式

发布时间: 2012-09-10 11:02:33 作者: rapoo

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;}@Overridepublic void add(Company company) {children.add(company);}@Overridepublic void delete(Company company) {children.remove(company);}@Overridepublic 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;}/** * 叶子节点无子节点 */@Overridepublic void add(Company company) {}/** * 叶子节点无子节点 */@Overridepublic void delete(Company company) {}@Overridepublic 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;}/** * 叶子节点无子节点 */@Overridepublic void add(Company company) {}/** * 叶子节点无子节点 */@Overridepublic void delete(Company company) {}@Overridepublic 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;}/** * 叶子节点无子节点 */@Overridepublic void add(Company company) {}/** * 叶子节点无子节点 */@Overridepublic void delete(Company company) {}@Overridepublic 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);}}

?

读书人网 >操作系统

热点推荐