设计模式之组合模式
Posted l_learning
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之组合模式相关的知识,希望对你有一定的参考价值。
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
从设计的角度看,组合模式涉及到三个角色:
抽象根节点:它是一个抽象接口,定义了算法;
具体节点:实现或继承自抽象根节点,完成具体算法操作;
客户端:客户类提出使用具体类的请求;
示例
以餐厅为例,餐厅有餐厅经理,厨师,服务员等员工,每一个员工都要工作,餐厅经理管理员工,可以将所有员工都设置为经理属性。
新建员工基类
public abstract class Employees {
/**
* 名称
*/
protected String name;
/**
* 构造器赋名
* @param name
*/
public Employees(String name){
this.name = name;
}
/**
* 新增员工
* @param employees
* @throws Exception
*/
public void addEmployees(Employees employees) throws Exception{
throw new Exception("Invalid exception");
}
/**
* 工作方法
*/
abstract void work();
}
经理类
经理管理员工,将员工列表作为属性
public class Manager extends Employees {
List<Employees> employeesList = new ArrayList<>();
/**
* 构造器赋名
*
* @param name
*/
public Manager(String name) {
super(name);
}
@Override
public void addEmployees(Employees employees) throws Exception {
employeesList.add(employees);
}
@Override
void work() {
System.out.println("我是"+name+":开始布置任务");
for (Employees employees:employeesList){
employees.work();
}
}
}
厨师类
厨师负责制作湘菜和川菜
public class Cook extends Employees {
/**
* 构造器赋名
*
* @param name
*/
public Cook(String name) {
super(name);
}
@Override
void work() {
System.out.println("我是"+name+":开始工作");
}
}
服务员
服务员负责点餐和收账
public class Waiter extends Employees {
/**
* 构造器赋名
*
* @param name
*/
public Waiter(String name) {
super(name);
}
@Override
void work() {
System.out.println("我是"+name+":开始工作");
}
}
老板
老板招了5个员工,开始组织员工工作
public class Boss {
public static void main(String[] args) throws Exception {
Employees employees = new Manager("餐厅经理");
employees.addEmployees(new Cook("湘菜厨师"));
employees.addEmployees(new Cook("川菜厨师"));
employees.addEmployees(new Waiter("点餐服务员"));
employees.addEmployees(new Waiter("结账服务员"));
employees.work();
}
}
执行结果展示
我是餐厅经理:开始布置任务
我是湘菜厨师:开始工作
我是川菜厨师:开始工作
我是点餐服务员:开始工作
我是结账服务员:开始工作
以上是关于设计模式之组合模式的主要内容,如果未能解决你的问题,请参考以下文章