描述:软件开发中有个很经典的问题,开发的流程首先是需求工程师跟客户沟通整理出需求之后,将需求抛给软件工程师,然后软件工程师找相应的UI设计师进行相应的界面修改。命令模式说的是客户直接找一个代表(项目经理)进行整个项目沟通,项目经理直接将项目抛给组内人员(需求工程师,软件工程师及UI设计师),项目经理只负责整个项目的把控,具体细节开发就交给组内人员开发。这里的Invoker与Command的关系是聚合的关系,好比工程师是归项目经理管理的。
UML类图如下:
Invoker:代表的是项目经理
Client: 代表客户
Receiver:代表具体功能的开发者(需求工程师,软件工程师,UI设计师)
具体测试代码如下:
1、命令接口类
package com.java.command;
public abstract class Command {
protected RequirementGroup rg = new RequirementGroup();
protected CodeGroup cg = new CodeGroup();
protected DesignGroup dg = new DesignGroup();
public void exec(){};
}
2、命令接口实现类
package com.java.command;
public class CodeCommand extends Command {
@Override
public void exec() {
super.exec();
cg.delete();
cg.add();
cg.modify();
}
}
package com.java.command;
public class DesignCommand extends Command {
@Override
public void exec() {
super.exec();
dg.delete();
dg.add();
dg.modify();
}
}
package com.java.command;
public class RequirementCommand extends Command {
@Override
public void exec() {
super.exec();
rg.delete();
rg.add();
rg.modify();
}
}
3、Receiver的接口类
package com.java.command;
public interface Group {
public void add();
public void delete();
public void modify();
}
4、Receiver接口实现类
package com.java.command;
public class DesignGroup implements Group {
@Override
public void add() {
System.out.println("美工组增加页面...");
}
@Override
public void delete() {
System.out.println("美工组删除页面...");
}
@Override
public void modify() {
System.out.println("美工组修改页面...");
}
}
package com.java.command;
public class RequirementGroup implements Group {
@Override
public void add() {
System.out.println("需求组增加需求...");
}
@Override
public void delete() {
System.out.println("需求组删除需求...");
}
@Override
public void modify() {
System.out.println("需求组修改需求...");
}
}
package com.java.command;
public class CodeGroup implements Group {
@Override
public void add() {
System.out.println("代码组增加功能代码...");
}
@Override
public void delete() {
System.out.println("代码组删除功能代码...");
}
@Override
public void modify() {
System.out.println("代码组修改功能代码...");
}
}
5、项目经理类
package com.java.command;
public class Invoker {
private Command command;
public Invoker() {
super();
}
public Invoker(Command command) {
this.command = command;
}
public void setCommand(Command command) {
this.command = command;
}
public void action(){
System.out.println("命令模式开始执行...");
command.exec();
System.out.println("命令模式开始结束...");
}
}
6、测试类
package com.java.command;
public class CommandTest {
public static void main(String[] args) {
RequirementCommand command = new RequirementCommand();
Invoker invoder = new Invoker();
invoder.setCommand(command);
invoder.action();
}
}
7、测试结果
命令模式开始执行...
需求组删除需求...
需求组增加需求...
需求组修改需求...
命令模式开始结束...