首页 > 代码库 > 设计模式14---组合模式
设计模式14---组合模式
组合模式可以理解为是树的结构的一种构建方式。
Composite是可以拓展的树的分支,树理论上可以无限长。
package com.jayfulmath.designpattern.composite;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(); protected void printfObjectName(int depth) { StringBuilder builder = new StringBuilder(); for(int i=0;i<depth;i++) { builder.append("-"); } System.out.println(builder.toString()+name); }}
package com.jayfulmath.designpattern.composite;public class FianceDepartment extends Company { public FianceDepartment(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void Add(Company c) { // TODO Auto-generated method stub } @Override public void Remove(Company c) { // TODO Auto-generated method stub } @Override public void Display(int depth) { // TODO Auto-generated method stub printfObjectName(depth); } @Override public void LineofDuty() { // TODO Auto-generated method stub System.out.println(name+"\t staff payoff"); }}
package com.jayfulmath.designpattern.composite;public class HRDepartment extends Company { public HRDepartment(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void Add(Company c) { // TODO Auto-generated method stub } @Override public void Remove(Company c) { // TODO Auto-generated method stub } @Override public void Display(int depth) { // TODO Auto-generated method stub printfObjectName(depth); } @Override public void LineofDuty() { // TODO Auto-generated method stub System.out.println(name+"\t staff recruitment "); }}
package com.jayfulmath.designpattern.composite;import com.jayfulmath.designpattern.main.BasicExample;public class CompositeMain extends BasicExample { @Override public void startDemo() { // TODO Auto-generated method stub CompositeCompany root = new CompositeCompany("北京总公司"); root.Add(new HRDepartment("总公司HR")); root.Add(new FianceDepartment("总公司FD")); CompositeCompany comp = new CompositeCompany("上海分公司"); comp.Add(new HRDepartment("上海分公司HR")); comp.Add(new FianceDepartment("上海分公司FD")); root.Add(comp); CompositeCompany comp1 = new CompositeCompany("浦东办事处"); comp1.Add(new HRDepartment("浦东办事处HR")); comp1.Add(new FianceDepartment("浦东办事处FD")); comp.Add(comp1); CompositeCompany comp2 = new CompositeCompany("人民广场办事处"); comp2.Add(new HRDepartment("人民广场办事处HR")); comp2.Add(new FianceDepartment("人民广场办事处FD")); comp.Add(comp2); System.out.println("结构图:"); root.Display(1); System.out.println("职责:"); root.LineofDuty(); }}
package com.jayfulmath.designpattern.composite;import com.jayfulmath.designpattern.main.BasicExample;public class CompositeMain extends BasicExample { @Override public void startDemo() { // TODO Auto-generated method stub CompositeCompany root = new CompositeCompany("北京总公司"); root.Add(new HRDepartment("总公司HR")); root.Add(new FianceDepartment("总公司FD")); CompositeCompany comp = new CompositeCompany("上海分公司"); comp.Add(new HRDepartment("上海分公司HR")); comp.Add(new FianceDepartment("上海分公司FD")); root.Add(comp); CompositeCompany comp1 = new CompositeCompany("浦东办事处"); comp1.Add(new HRDepartment("浦东办事处HR")); comp1.Add(new FianceDepartment("浦东办事处FD")); comp.Add(comp1); CompositeCompany comp2 = new CompositeCompany("人民广场办事处"); comp2.Add(new HRDepartment("人民广场办事处HR")); comp2.Add(new FianceDepartment("人民广场办事处FD")); comp.Add(comp2); System.out.println("结构图:"); root.Display(1); System.out.println("职责:"); root.LineofDuty(); }}
运行结果:
结构图:-北京总公司---总公司HR---总公司FD---上海分公司-----上海分公司HR-----上海分公司FD-----浦东办事处-------浦东办事处HR-------浦东办事处FD-----人民广场办事处-------人民广场办事处HR-------人民广场办事处FD职责:总公司HR staff recruitment 总公司FD staff payoff上海分公司HR staff recruitment 上海分公司FD staff payoff浦东办事处HR staff recruitment 浦东办事处FD staff payoff人民广场办事处HR staff recruitment 人民广场办事处FD staff payoff
Leaf 是没有add和remove功能的,但是保留这两个接口可以是代码保持统一性.
设计模式14---组合模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。