- 定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或记录请求日志,可以提供命令的撤销和恢复功能。
- 抽象分组类及三个实现类(需求组、页面组、代码组)
- 抽象命令类及多个实现类(增加需求命令、减少页面命令等)
- 命令接收者类,此类中有一个私有的命令成员和一个触发方法(此方法会执行私有命令成员的某个方法)
- 代码:
public abstract class Group {
protected abstract void find();
protected abstract void add();
protected abstract void delete();
protected abstract void change();
protected abstract void exe();
}
public class PageGroup extends Group{
protected void find() {
System.out.println("页面组:找到页面组!");
}
protected void add() {
System.out.println("页面组:增加一个页面!");
}
protected void delete() {
System.out.println("页面组:减少一个页面!");
}
protected void change() {
System.out.println("页面组:修改一个页面!");
}
protected void exe() {
System.out.println("页面组:执行对页面的更改!");
}
}
public class RequirementGroup extends Group{
protected void find() {
System.out.println("需求组:找到需求组!");
}
protected void add() {
System.out.println("需求组:增加一条需求!");
}
protected void delete() {
System.out.println("需求组:减少一条需求!");
}
protected void change() {
System.out.println("需求组:修改一条需求!");
}
protected void exe() {
System.out.println("需求组:执行对需求的更改!");
}
}
public class CodeGroup extends Group{
protected void find() {
System.out.println("代码组:找到代码组!");
}
protected void add() {
System.out.println("代码组:增加一段代码!");
}
protected void delete() {
System.out.println("代码组:减少一段代码!");
}
protected void change() {
System.out.println("代码组:修改一段代码!");
}
protected void exe() {
System.out.println("代码组:执行对代码的更改!");
}
}
public abstract class Command {
protected RequirementGroup requirementGroup = new RequirementGroup();
protected PageGroup pageGroup = new PageGroup();
protected CodeGroup codeGroup = new CodeGroup();
public abstract void runCommand();
}
public class AddRequirementCommand extends Command{
public void runCommand() {
super.requirementGroup.find();
super.requirementGroup.add();
super.requirementGroup.exe();
}
}
public class DeletePageCommand extends Command{
public void runCommand() {
super.pageGroup.find();
super.pageGroup.delete();
super.pageGroup.exe();
}
}
public class Invoker {
private Command command;
public void setCommand(Command command){
this.command = command;
}
public void action(){
this.command.runCommand();
}
}
public class Client {
public static void main(String[] args){
Invoker invoker = new Invoker();
Command addRequirementCommand = new AddRequirementCommand();
invoker.setCommand(addRequirementCommand);
invoker.action();
Command deletePageCommand = new DeletePageCommand();
invoker.setCommand(deletePageCommand);
invoker.action();
}
}