设计模式之命令模式11
背景
正常做一个项目,有客户,需求组,美工组,开发组。然后项目经理负责统筹整个项目的进度和安排。
这时,客户找到项目经理说任何一个事情,增加需求,删除需求,增加页面,修改页面等等。这样就造就了命令模式
类图
代码实现
首先要定义各个组的抽象类
public abstract class Group {
public abstract void add();
public abstract void delete();
public abstract void change();
public abstract void find();
public abstract void plan();
}
需求组继承抽象的组
public class RequireGroup extends Group{
@Override
public void add() {
System.out.println("需求组增加功能");
}
@Override
public void delete() {
System.out.println("需求组删除功能");
}
@Override
public void change() {
System.out.println("需求组修改功能");
}
@Override
public void find() {
System.out.println("找到需求组开会");
}
@Override
public void plan() {
System.out.println("需求组设定计划");
}
}
美工组
public class PageGroup extends Group{
@Override
public void add() {
System.out.println("美工组增加功能");
}
@Override
public void delete() {
System.out.println("美工组删除功能");
}
@Override
public void change() {
System.out.println("美工组修改功能");
}
@Override
public void find() {
System.out.println("找到美工组开会");
}
@Override
public void plan() {
System.out.println("美工组设定计划");
}
}
开发组
public class CodeGroup extends Group{
@Override
public void add() {
System.out.println("开发组增加功能");
}
@Override
public void delete() {
System.out.println("开发组删除功能");
}
@Override
public void change() {
System.out.println("开发组修改功能");
}
@Override
public void find() {
System.out.println("找到开发组开会");
}
@Override
public void plan() {
System.out.println("开发组设定计划");
}
}
定义一个抽象的命令,让各个具体的命令所继承。而项目经理也将调用这个。
public abstract class Command {
protected RequireGroup requireGroup = new RequireGroup();
protected PageGroup pageGroup = new PageGroup();
protected CodeGroup codeGroup = new CodeGroup();
public abstract void execute();
}
增加需求的命令
public class RequireAddCommand extends Command{
@Override
public void execute() {
super.requireGroup.find();
super.requireGroup.plan();
super.requireGroup.add();
}
}
删除页面的命令
public class PageDeleteCommand extends Command{
@Override
public void execute() {
super.pageGroup.find();
super.pageGroup.plan();
super.pageGroup.delete();
super.codeGroup.delete();
}
}
项目经理来统筹协调各个方面
public class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void action() {
this.command.execute();
}
}
客户告知项目经理,要先增加需求,再删除页面
public class Client {
public static void main(String[] args) {
Invoker invoker = new Invoker();
invoker.setCommand(new RequireAddCommand());
invoker.action();
System.out.println();
invoker.setCommand(new PageDeleteCommand());
invoker.action();
}
}