属于行为型模式(共11种)
目的:
结合 chain of responsibility 可以实现 undo的功能 (就是撤销ctrl+z)
类图:
部分代码实现
public abstract class Command {public abstract void doit(); //exec runpublic abstract void undo();}---------------------------------------------------------public class CopyCommand extends Command {Content c;public CopyCommand(Content c) {this.c = c;}@Overridepublic void doit() {c.msg = c.msg + c.msg;}@Overridepublic void undo() {c.msg = c.msg.substring(0, c.msg.length()/2);}}---------------------------------------------------------public class DeleteCommand extends Command {Content c;String deleted;public DeleteCommand(Content c) {this.c = c;}@Overridepublic void doit() {deleted = c.msg.substring(0, 5);c.msg = c.msg.substring(5, c.msg.length());}@Overridepublic void undo() {c.msg = deleted + c.msg;}}---------------------------------------------------------public class Main {public static void main(String[] args) {Content c = new Content();Command insertCommand = new InsertCommand(c);insertCommand.doit();insertCommand.undo();Command copyCommand = new CopyCommand(c);insertCommand.doit();insertCommand.undo();Command deleteCommand = new DeleteCommand(c);deleteCommand.doit();deleteCommand.undo();List<Command> commands = new ArrayList<>();commands.add(new InsertCommand(c));commands.add(new CopyCommand(c));commands.add(new DeleteCommand(c));for(Command comm : commands) {comm.doit();}System.out.println(c.msg);for(int i= commands.size()-1; i>=0; i--) {commands.get(i).undo();}System.out.println(c.msg);}}
command + memento 实现 transaction事务回滚
command + composite 实现 宏命令 多种命令组合
