一、概述
装饰者模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供比继承更有弹性的替代方案
二、情景
当公司接到一个项目时,需要安排项目经理与程序员进行工作,具体的工作流程是,项目经理完成前期的准备工作后,安排程序员进行编码工作,最后又项目经理完成验收等收尾工作。此时,可以声明一个管理类作为装饰者类,来扩展项目的完成功能。
三、代码
1.项目接口类
public interface Project {
void working();
}
2.管理类
public abstract class Manager implements Project {
private Project programmer;
public Manager(Project programmer) {
this.programmer = programmer;
}
public abstract void doEarlyWork();
public abstract void doEndWork();
@Override
public void working() {
doEarlyWork();
programmer.working();
doEndWork();
}
}
3.项目经理类
public class ProManagerA extends Manager {
public ProManagerA(Project programmer) {
super(programmer);
}
@Override
public void doEarlyWork() {
System.out.println("项目经理A正在处理前期业务");
}
@Override
public void doEndWork() {
System.out.println("项目经理A正在处理收尾业务");
}
}
4.程序员类
public class Programmer implements Project {
@Override
public void working() {
System.out.println("程序员在疯狂写代码 并已完成");
}
}
5.测试类
public class Test {
public static void main(String[] args) {
Project programmer = new Programmer();
Project manager = new ProManagerA(programmer);
manager.working();
}
}