设计模式_15:组合模式
来源:互联网 发布:数据恢复 mac osx 编辑:程序博客网 时间:2024/06/06 02:09
将对象组合成属性结构以表示'部分-整体'的层次结构组合模式使得用户对单个对象和组合对象的使用具有一致性
import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) { Company topCompany = new ConcreteCompany("总部"); Company eastCompany = new ConcreteCompany("东部分部"); Company westCompany = new ConcreteCompany("西部分部"); topCompany.add(eastCompany); topCompany.add(westCompany); Company topHr = new HRDepartment("总部人力资源部"); Company eastHr = new HRDepartment("东部人力资源部"); Company westHr = new HRDepartment("西部人力资源部"); Company westFinance = new HRDepartment("西部财务部部"); topCompany.add(topHr); eastCompany.add(eastHr); westCompany.add(westHr); westCompany.add(westFinance); topCompany.display(1); System.out.println("------------------------"); topCompany.work(); }}abstract class Company { protected String name; public Company(String name) { this.name = name; } abstract void add(Company company); abstract void remove(Company company); abstract void display(int depth); abstract void work();}//具体的公司或分部(非叶子结点)class ConcreteCompany extends Company{ private List<Company> companies = new ArrayList<>(); public ConcreteCompany(String name) { super(name); } @Override void add(Company company) { companies.add(company); } @Override void remove(Company company) { companies.remove(company); } @Override void display(int depth) { for (int i=0; i<depth; i++){ System.out.print("-"); } System.out.println(this.name); for (Company company : companies){ company.display(depth + 2); } } @Override void work() { System.out.println(this.name + "为下属部门分配工作"); for (Company company : companies){ company.work(); } }}//人力资源部(叶子结点)class HRDepartment extends Company{ public HRDepartment(String name) { super(name); } @Override void add(Company company) { System.out.println(this.name + "不能添加下属部门"); } @Override void remove(Company company) { System.out.println(this.name + "不能添加下属部门"); } @Override void display(int depth) { for (int i=0; i<depth; i++){ System.out.print("-"); } System.out.println(this.name); } @Override void work() { System.out.println(this.name + "正在招收人才"); }}//财务部(叶子结点)class FinanceDepartment extends Company{ public FinanceDepartment(String name) { super(name); } @Override void add(Company company) { System.out.println(this.name + "不能添加下属部门"); } @Override void remove(Company company) { System.out.println(this.name + "不能添加下属部门"); } @Override void display(int depth) { for (int i=0; i<depth; i++){ System.out.print("-"); } System.out.println(this.name); } @Override void work() { System.out.println(this.name + "正在发工资"); }}
运行结果:
-总部---东部分部-----东部人力资源部---西部分部-----西部人力资源部-----西部财务部部---总部人力资源部------------------------总部为下属部门分配工作东部分部为下属部门分配工作东部人力资源部正在招收人才西部分部为下属部门分配工作西部人力资源部正在招收人才西部财务部部正在招收人才总部人力资源部正在招收人才
阅读全文
1 0
- 设计模式_15:组合模式
- 观察者模式(设计模式_15)
- 设计模式:组合模式
- 设计模式-----组合模式
- 设计模式 组合模式
- 设计模式--组合模式
- 设计模式---组合模式
- 【设计模式】组合模式
- 设计模式 - 组合模式
- 设计模式----组合模式
- 设计模式 - 组合模式
- 设计模式:组合模式
- 设计模式 - 组合模式
- 设计模式-组合模式
- 设计模式 - 组合模式
- 【设计模式】组合模式
- 设计模式--组合模式
- 设计模式-组合模式
- Titanic : Machine Learning from Disaster
- 微软免费的开源代码编辑器Visual Studio Code 1.17新增多项功能
- 单例模式和介绍
- 阿里云计算能力实现新突破 BigBench全球首次达到100TB
- 《操作系统》总结四(文件管理)
- 设计模式_15:组合模式
- 形参与实参
- 执行sql的时候为什么会出现Parameter index out of range (1 > number of parameters, which is 0)?
- 常用的混淆代码
- Cosos2d-x创建新的HelloWorld工程 Mac
- Hostapd
- test1
- [Lintcode] #700 杆子分割
- 阿里云总裁胡晓明:未来和合作伙伴一起_服务1000万家企业