组合模式(Composite Pattern)
将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
它使我们在树形结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
员工类
public abstract class Staff {
//姓名
private String name;
//职业
private String position;
public Staff(String name,String position){
this.name=name;
this.position=position;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public void printStaffInfo(){
System.out.println(this.name+" "+this.position);
}
public void printEmployeesInfo(){};
public void add(Staff staff){};
}
管理者类
public class Manager extends Staff{
//手下员工
private List<Staff> staffList=new ArrayList<Staff>();
public Manager(String name, String position) {
super(name, position);
}
@Override
public void add(Staff staff) {
staffList.add(staff);
}
@Override
public void printEmployeesInfo() {
for(Staff staff:this.staffList){
System.out.println(this.getName()+"的下属:"+staff.getName()+" "+staff.getPosition());
//迭代
staff.printEmployeesInfo();
}
}
}
普通员工类
public class Employee extends Staff{
public Employee(String name, String position) {
super(name, position);
}
}
测试类
public class Demo {
public static void main(String[] args) {
Staff boss=new Manager("大老板", "CEO");
Staff financeManager=new Manager("张总", "财务部经理");
Staff personnelManager=new Manager("王总", "人事部经理");
Staff technicalManager=new Manager("陈总", "技术部经理");
Staff marketManager=new Manager("吴总", "市场部经理");
Staff deptAssistant=new Manager("王助理", "部门助理");
Staff deptManager1=new Manager("主管1", "技术主管");
Staff deptManager2=new Manager("主管2", "技术主管");
Staff softwareEngineer1=new Employee("张三", "软件工程师");
Staff softwareEngineer2=new Employee("李四", "软件工程师");
Staff softwareEngineer3=new Employee("王五", "软件工程师");
//为主管1添加员工
deptManager1.add(softwareEngineer1);
deptManager1.add(softwareEngineer2);
deptManager1.add(softwareEngineer3);
//为陈中添加员工
technicalManager.add(deptAssistant);
technicalManager.add(deptManager1);
technicalManager.add(deptManager2);
//为大老板添加员工
boss.add(financeManager);
boss.add(personnelManager);
boss.add(technicalManager);
boss.add(marketManager);
boss.printStaffInfo();
boss.printEmployeesInfo();
}
}
测试结果
大老板 CEO
大老板的下属:张总 财务部经理
大老板的下属:王总 人事部经理
大老板的下属:陈总 技术部经理
陈总的下属:王助理 部门助理
陈总的下属:主管1 技术主管
主管1的下属:张三 软件工程师
主管1的下属:李四 软件工程师
主管1的下属:王五 软件工程师
陈总的下属:主管2 技术主管
大老板的下属:吴总 市场部经理
- 大小: 71.5 KB
分享到:
相关推荐
java常用设计模式-组合模式
设计模式-组合模式(讲解及其实现代码)
c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...
设计模式--组合模式java例子
JAVA-设计模式-结构型模式-组合模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
自己最近才写的一个设计模式----组合模式小例子,请大家评价
ios平台中通过最简单的代码讲解组合实体模式,可在博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html中查看简单解释
设计模式专题之(九)组合模式---设计模式组合模式示例代码(python--c++)
设计模式06-适配器、桥接、组合模式 设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式...
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
本资源包含一个由Java设计模式中的“组合模式”实现的“空军指挥系统”的全部源代码。注意:本资源含有的代码量比较大,对于急需“项目实战”的朋友很有帮助!需要的朋友可以下载哦!!!!!!!!!!
c++设计模式-结构型模式-桥接模式;qt工程,c++简单源码; 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度...
2.2.3 组合模式 272.3 格式化 27 2.3.1 封装格式化算法 27 2.3.2 Compositor 和 Composition 27 2.3.3 策略模式 29 2.4 修饰用户界面 29 2.4.1 透明围栏 29 2.4.2 Monoglyph 30 2.4.3 Decorator 模式 32 2.5 支持...
设计模式实验报告
一、我们上篇主要讲述了结构型模式中的外观模式,外观模式作为结构型模式中的一个简单又实用的模式,外观模式通过封装细节来提供大粒度的调用, 直接的好处就是,封装细节,提供了应用写程序的可维护性和易用性。...
这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的...
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...