设计模式 - 组合模式
来源:互联网 发布:手机淘宝首页切图模块 编辑:程序博客网 时间:2024/04/27 18:20
组合模式:主要处理树形结构以处理“整体-部分之间”的层次关系。做到对单个对象和组合对象的处理方式一样。
下面以管理者和普通员工来说明组合模式的应用
(1)创建基本员工类
package com.demo.dp.composite;public abstract class BaseEmployee {protected String empName;protected String empId;protected int empSalary;protected String empPosition;public BaseEmployee(String empName, String empId, int empSalary,String empPosition) {this.empName = empName;this.empId = empId;this.empSalary = empSalary;this.empPosition = empPosition;}// 添加员工public abstract void add(BaseEmployee emp);// 删除员工信息public abstract void remove(BaseEmployee emp);// 打印员工信息public abstract void printEmployeeInfo();// 打印自身信息public void printBaseInfo() {System.out.println("姓名:" + empName + " |员工号:" + empId + " |工资:"+ empSalary + " |职位:" + empPosition);System.out.println();}public void printSpaceChar(int count){for(int i=0;i<count;i++){System.out.print(" ");}}public String getEmpName() {return empName;}public void setEmpName(String empName) {this.empName = empName;}public String getEmpId() {return empId;}public void setEmpId(String empId) {this.empId = empId;}public int getEmpSalary() {return empSalary;}public void setEmpSalary(int empSalary) {this.empSalary = empSalary;}public String getEmpPosition() {return empPosition;}public void setEmpPosition(String empPosition) {this.empPosition = empPosition;}}(2)创建管理者
package com.demo.dp.composite.sub;import java.util.ArrayList;import com.demo.dp.composite.BaseEmployee;public class Manager extends BaseEmployee {private ArrayList<BaseEmployee> empList = new ArrayList<BaseEmployee>();public Manager(String empName, String empId, int empSalary,String empPosition) {super(empName, empId, empSalary, empPosition);}@Overridepublic void add(BaseEmployee emp) {empList.add(emp);}@Overridepublic void printEmployeeInfo() {for(BaseEmployee emp:empList){if(emp instanceof Manager){printSpaceChar(emp.getEmpId().length()*6) ;emp.printBaseInfo() ;emp.printEmployeeInfo() ;}else if(emp instanceof CommonEmployee){printSpaceChar(emp.getEmpId().length()*8) ;emp.printBaseInfo() ;}}}@Overridepublic void remove(BaseEmployee emp) {if (empList.contains(emp)) {boolean flag = empList.remove(emp);System.out.println("remove employee result:" + flag);}else{System.out.println("您的手底下没有这个员工,请核对信息重新操作,谢谢。");}}}
(3)创建普通员工
package com.demo.dp.composite.sub;import com.demo.dp.composite.BaseEmployee;public class CommonEmployee extends BaseEmployee{public CommonEmployee(String empName, String empId, int empSalary,String empPosition) {super(empName, empId, empSalary, empPosition);}@Overridepublic void add(BaseEmployee emp) {}@Overridepublic void printEmployeeInfo() {}@Overridepublic void remove(BaseEmployee emp) {}}(4)创建测试类
package com.demo.dp.composite;import com.demo.dp.composite.sub.CommonEmployee;import com.demo.dp.composite.sub.Manager;public class Client {public static void main(String[] args) {BaseEmployee boss = new Manager("大老板", "1", 10000, "CEO") ;BaseEmployee finacial = new Manager("张总", "11", 8000, "财务部经理") ;BaseEmployee humanRecource = new Manager("王总", "12", 8000, "人事部经理") ;BaseEmployee technical = new Manager("陈总", "13", 8000, "技术部经理") ;BaseEmployee market = new Manager("吴总", "14", 8000, "市场部经理") ;BaseEmployee technicalOne = new Manager("主管1", "131", 5000, "技术主管") ;BaseEmployee technicalTwo = new Manager("主管2", "132", 5000, "技术主管") ;BaseEmployee devOne = new CommonEmployee("张三", "1311", 4500, "软件工程师") ;BaseEmployee devTwo = new CommonEmployee("李四", "1312", 4500, "软件工程师") ;BaseEmployee devThree = new CommonEmployee("王五", "1313", 4500, "软件工程师") ;boss.add(finacial) ;boss.add(humanRecource) ;boss.add(technical) ;boss.add(market) ;technical.add(technicalOne) ;technical.add(technicalTwo) ;technicalOne.add(devOne) ;technicalOne.add(devTwo) ;technicalOne.add(devThree) ;boss.printBaseInfo() ;boss.printEmployeeInfo() ;}}
输出结果:
姓名:大老板 |员工号:1 |工资:10000 |职位:CEO 姓名:张总 |员工号:11 |工资:8000 |职位:财务部经理 姓名:王总 |员工号:12 |工资:8000 |职位:人事部经理 姓名:陈总 |员工号:13 |工资:8000 |职位:技术部经理 姓名:主管1 |员工号:131 |工资:5000 |职位:技术主管 姓名:张三 |员工号:1311 |工资:4500 |职位:软件工程师 姓名:李四 |员工号:1312 |工资:4500 |职位:软件工程师 姓名:王五 |员工号:1313 |工资:4500 |职位:软件工程师 姓名:主管2 |员工号:132 |工资:5000 |职位:技术主管 姓名:吴总 |员工号:14 |工资:8000 |职位:市场部经理
0 0
- 设计模式:组合模式
- 设计模式-----组合模式
- 设计模式 组合模式
- 设计模式--组合模式
- 设计模式---组合模式
- 【设计模式】组合模式
- 设计模式 - 组合模式
- 设计模式----组合模式
- 设计模式 - 组合模式
- 设计模式:组合模式
- 设计模式 - 组合模式
- 设计模式-组合模式
- 设计模式 - 组合模式
- 【设计模式】组合模式
- 设计模式--组合模式
- 设计模式-组合模式
- 设计模式:组合模式
- 设计模式-----组合模式
- 2014年广东松田学院专插本《计算机操作系统》第二章考试纲领答案
- 解密你为何成不了富人
- 排序算法性能分析
- 创业应该注意哪些?[巨人老总]
- mutex、condition与pthread_cond_wait()函数的使用
- 设计模式 - 组合模式
- 在1-50万的编号里摇号,输出前n个尾号为55和77的编号
- 不用刷机,简单几步操作让你的的安卓手机如新机般流畅。
- 主键关联和外键关键
- linux编程,慎用system()
- 策略模式 商场促销
- poj 1741 Tree(树形DP+分治)难
- 反射的字ReflectedText
- python-图片蜘蛛