大话设计模式-组合模式
来源:互联网 发布:奔驰g63网络图片 编辑:程序博客网 时间:2024/06/02 02:32
需求
设计一个总公司和分公司的OA系统。
实现
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 remove(Company company);protected abstract void display(int depth);}
import java.util.*;class ConcreteCompany extends Company{private List<Company> list;public ConcreteCompany(){list=new ArrayList<Company>();}public ConcreteCompany(String name){super(name);list=new ArrayList<Company>(); }@Overrideprotected void add(Company company){// TODO Auto-generated method stublist.add(company);}@Overrideprotected void remove(Company company){// TODO Auto-generated method stublist.remove(company);}@Overrideprotected void display(int depth){// TODO Auto-generated method stubStringBuilder sb=new StringBuilder("");for(int i=0;i<depth;i++){sb.append("-");}System.out.println(new String(sb)+this.getName());for(Company c:list){c.display(depth+2);}}}
public class FinanceDepartment extends Company{public FinanceDepartment(){}public FinanceDepartment(String name){super(name);}@Overrideprotected void add(Company company){// TODO Auto-generated method stub}@Overrideprotected void remove(Company company){// TODO Auto-generated method stub}@Overrideprotected void display(int depth) {// TODO Auto-generated method stubStringBuilder sb=new StringBuilder("");for(int i=0;i<depth;i++){sb.append("-");}System.out.println(new String(sb)+this.getName());}}
public class HRDepartment extends Company{public HRDepartment(){}public HRDepartment(String name){super(name);}@Overrideprotected void add(Company company) {// TODO Auto-generated method stub}@Overrideprotected void remove(Company company) {// TODO Auto-generated method stub}@Overrideprotected void display(int depth){// TODO Auto-generated method stubStringBuilder sb=new StringBuilder("");for(int i=0;i<depth;i++){sb.append("-");}System.out.println(new String(sb)+this.getName());}}
public class Main { public static void main(String[] args) { Company root=new ConcreteCompany();root.setName("北京总公司");root.add(new HRDepartment("总公司人力资源部"));root.add(new FinanceDepartment("总公司财务部"));Company shandongCom=new ConcreteCompany("山东分公司");shandongCom.add(new HRDepartment("山东分公司人力资源部"));shandongCom.add(new FinanceDepartment("山东分公司账务部"));Company zaozhuangCom=new ConcreteCompany("枣庄办事处");zaozhuangCom.add(new FinanceDepartment("枣庄办事处财务部"));zaozhuangCom.add(new HRDepartment("枣庄办事处人力资源部"));Company jinanCom=new ConcreteCompany("济南办事处");jinanCom.add(new FinanceDepartment("济南办事处财务部"));jinanCom.add(new HRDepartment("济南办事处人力资源部")); shandongCom.add(jinanCom);shandongCom.add(zaozhuangCom);Company huadongCom=new ConcreteCompany("华东分公司");huadongCom.add(new HRDepartment("华东分公司人力资源部"));huadongCom.add(new FinanceDepartment("华东分公司账务部"));Company hangzhouCom=new ConcreteCompany("杭州办事处");hangzhouCom.add(new FinanceDepartment("杭州办事处财务部"));hangzhouCom.add(new HRDepartment("杭州办事处人力资源部"));Company nanjingCom=new ConcreteCompany("南京办事处");nanjingCom.add(new FinanceDepartment("南京办事处财务部"));nanjingCom.add(new HRDepartment("南京办事处人力资源部"));huadongCom.add(hangzhouCom);huadongCom.add(nanjingCom); root.add(shandongCom);root.add(huadongCom);root.display(0); } }组合模式,将对象组合成树形结构以表示部分-整体的层次结构,使得用户对单个对象和组合对象的使用具有一致性。用于对象的部分-整体层次结构,如树形菜单、文件夹菜单、部门组织架构图;也用于需要对用户隐藏组合对象与单个对象的不同时的情况,使得用户统一地使用组合结构中的所有对象。
0 0
- 大话设计-组合模式
- 大话设计模式-组合模式
- 大话设计模式 组合模式
- 大话设计模式-组合模式
- 大话设计模式-组合模式
- 大话设计模式之组合模式
- 大话设计模式_组合模式
- 大话设计模式之组合模式
- 大话设计模式之组合模式
- 大话设计模式—组合模式
- 大话设计模式19----组合模式
- 大话设计模式笔记之组合模式
- 大话设计模式之组合模式
- 大话设计模式读书笔记之组合模式
- 大话设计模式-组合模式学习总结
- 大话设计模式8 组合模式 迭代器模式
- 大话设计模式学习(十四)——组合模式
- 大话设计模式--组合模式 Composite -- C++实现实例
- 【Vue】-(3) Vue与MVVM
- java生成pdf文件
- 耦合度
- Mybatis打印可执行mysql语句(工具和拦截器两种方式)
- LDA PCA
- 大话设计模式-组合模式
- NSURLRequestCachePolicy 缓存的方式
- 匈牙利算法
- 剑指offer-面试题51:数组中重复的数字
- Hbase作为Web的数据库
- nginx+memcahed+tomcat实现session的资源共享
- 易彰彪的一张表
- Java代码优化
- TransMac 下载 win7 win10 U盘启动的制作方法 win7 win10 U盘启动的 transMac制作方法