【结构型模式】《大话设计模式》——读后感 (14)分公司=一部门?——组合模式
来源:互联网 发布:strcontains php 编辑:程序博客网 时间:2024/05/20 21:21
组合模式:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性【DP】
Company:
package com.sjmx.composite;public abstract class Company { private String name; public Company(String name) { this.name = name; } public Company() { } public String getName() { return name; } public void setName(String name) { this.name = name; } protected abstract void add(Company company); protected abstract void romove(Company company); protected abstract void display(int depth);}
叶子节点:
package com.sjmx.composite;public class LeafCompany extends Company { public LeafCompany() { } public LeafCompany(String name) { super(name); } @Override protected void add(Company company) { } @Override protected void romove(Company company) { } @Override protected void display(int depth) { StringBuilder sb = new StringBuilder(""); for (int i = 0; i < depth; i++) { sb.append("-"); } System.out.println(new String(sb) + this.getName()); }}
直属节点:
package com.sjmx.composite;public class HRDepartment extends Company { public HRDepartment(){} public HRDepartment(String name){ super(name); } @Override protected void add(Company company) { } @Override protected void display(int depth) { StringBuilder sb = new StringBuilder(""); for (int i = 0; i < depth; i++) { sb.append("-"); } System.out.println(new String(sb) + this.getName() ) ; } @Override protected void romove(Company company) {} }
树干节点:
package com.sjmx.composite;import java.util.ArrayList;import java.util.List;public class ConcreteCompany extends Company { private List<Company> cList; public ConcreteCompany() { cList = new ArrayList<Company>(); } public ConcreteCompany(String name) { super(name); cList = new ArrayList<Company>() ; } @Override protected void add(Company company) { cList.add(company); } @Override protected void display(int depth) { StringBuilder sb = new StringBuilder(""); for (int i = 0; i < depth; i++) { sb.append("-"); } System.out.println(new String(sb) + this.getName()); for (Company c : cList) { c.display(depth + 4); } } @Override protected void romove(Company company) { cList.remove(company); } }
客户端:
package com.sjmx.composite;public class Client { /** * @param args */ public static void main(String[] args) { Company root = new ConcreteCompany(); root.setName("北京总公司"); root.add(new HRDepartment("总公司人力资源部")); root.add(new ConcreteCompany("总公司财务部")); Company shandongCom = new ConcreteCompany("山东分公司"); shandongCom.add(new HRDepartment("山东分公司人力资源部")); shandongCom.add(new ConcreteCompany("山东分公司账务部")); Company zaozhuangCom = new ConcreteCompany("枣庄办事处"); zaozhuangCom.add(new ConcreteCompany("枣庄办事处财务部")); zaozhuangCom.add(new HRDepartment("枣庄办事处人力资源部")); Company jinanCom = new ConcreteCompany("济南办事处"); jinanCom.add(new ConcreteCompany("济南办事处财务部")); jinanCom.add(new HRDepartment("济南办事处人力资源部")); shandongCom.add(jinanCom); shandongCom.add(zaozhuangCom); Company huadongCom = new ConcreteCompany("上海华东分公司"); huadongCom.add(new HRDepartment("上海华东分公司人力资源部")); huadongCom.add(new ConcreteCompany("上海华东分公司账务部")); Company hangzhouCom = new ConcreteCompany("杭州办事处"); hangzhouCom.add(new ConcreteCompany("杭州办事处财务部")); hangzhouCom.add(new HRDepartment("杭州办事处人力资源部")); Company nanjingCom = new ConcreteCompany("南京办事处"); nanjingCom.add(new ConcreteCompany("南京办事处财务部")); nanjingCom.add(new HRDepartment("南京办事处人力资源部")); huadongCom.add(hangzhouCom); huadongCom.add(nanjingCom); root.add(shandongCom); root.add(huadongCom); root.display(0); } }
运行结果:
北京总公司----总公司人力资源部----总公司财务部----山东分公司--------山东分公司人力资源部--------山东分公司账务部--------济南办事处------------济南办事处财务部------------济南办事处人力资源部--------枣庄办事处------------枣庄办事处财务部------------枣庄办事处人力资源部----上海华东分公司--------上海华东分公司人力资源部--------上海华东分公司账务部--------杭州办事处------------杭州办事处财务部------------杭州办事处人力资源部--------南京办事处------------南京办事处财务部------------南京办事处人力资源部
阅读全文
0 0
- 【结构型模式】《大话设计模式》——读后感 (14)分公司=一部门?——组合模式
- 《大话设计模式》—— 读后感(19)分公司=部门——组合设计模式
- 分公司=一部门——组合模式
- 大话设计模式十九:组合模式(分公司 = 一部门)
- 《大话设计模式》--分公司=一部门--组合模式<Composite>(19)
- 设计模式:19 分公司=一部门_组合模式
- 【结构型模式】《大话设计模式》——读后感 (9)牛市股票还会亏钱?——外观模式
- 【结构型模式】《大话设计模式》——读后感 (12)在NBA我需要翻译?——适配器模式
- 【结构型模式】《大话设计模式》——读后感 (13)手机软件何时能统一?——桥接模式
- 大话设计模式—组合模式
- 第19章 分公司=一部门------组合模式
- 第十九章分公司=一部门--组合模式(读书笔记)
- 《大话设计模式》 —— 读后感 (11)迪米特法则
- 大话设计模式学习(十四)——组合模式
- 【设计模式】分公司是一个部门? ---- 组合模式
- 《大话设计》——结构型模式
- 《大话设计模式》——学习笔记之"结构型模式"(适配器&装饰&桥接&组合&亨元&代理&外观)
- 【大话设计模式】——结构型模式总结
- 【结构型模式】《大话设计模式》——读后感 (12)在NBA我需要翻译?——适配器模式
- 【结构型模式】《大话设计模式》——读后感 (13)手机软件何时能统一?——桥接模式
- web前端面试题汇总(二)
- linux内核代码风格(中文)
- (数学)HDU 6043 KazaQ's Socks
- 【结构型模式】《大话设计模式》——读后感 (14)分公司=一部门?——组合模式
- 【JTS】利用JTS生成R树索引
- 【行为型模式】《大话设计模式》——读后感 (15)烤羊肉串引来的思考?——命令模式
- input的type=file触发的相关事件
- Android进阶之数据库框架ormlite使用
- WKWebView无法接受到JS调用原生方法的回调.
- 【行为型模式】《大话设计模式》——读后感 (16)加薪非要老板批?——职责链模式
- 2017 Multi-University Training Contest
- 利用python代码求质数