设计模式读书笔记-命令模式

2016-08-21
读书笔记
  • 定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或记录请求日志,可以提供命令的撤销和恢复功能。
  • 抽象分组类及三个实现类(需求组、页面组、代码组)
  • 抽象命令类及多个实现类(增加需求命令、减少页面命令等)
  • 命令接收者类,此类中有一个私有的命令成员和一个触发方法(此方法会执行私有命令成员的某个方法)
  • 代码:
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();
    }
}

Kommentare: