封装命令
代码结构
源码
package com.myspringboot.shejimoshi.mingling;
public abstract class Command {
public abstract void todo();
public abstract void undo();
}
package com.myspringboot.shejimoshi.mingling;
public class Content {
String msg = "hello everybody ";
}
package com.myspringboot.shejimoshi.mingling;
public class CopyCommand extends Command {
Content c;
public CopyCommand(Content c) {
this.c = c;
}
@Override
public void todo() {
c.msg = c.msg + c.msg;
}
@Override
public void undo() {
c.msg = c.msg.substring(0, c.msg.length()/2);
}
}
package com.myspringboot.shejimoshi.mingling;
public class DeleteCommand extends Command {
Content c;
String deleted;
public DeleteCommand(Content c) {
this.c = c;
}
@Override
public void todo() {
deleted = c.msg.substring(0, 5);
c.msg = c.msg.substring(5, c.msg.length());
}
@Override
public void undo() {
c.msg = deleted + c.msg;
}
}
package com.myspringboot.shejimoshi.mingling;
public class InsertCommand extends Command {
Content c;
String strToInsert = "go";
public InsertCommand(Content c) {
this.c = c;
}
@Override
public void todo() {
c.msg = c.msg + strToInsert;
}
@Override
public void undo() {
c.msg = c.msg.substring(0, c.msg.length()-strToInsert.length());
}
}
package com.myspringboot.shejimoshi.mingling;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Content c = new Content();
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.todo();
}
System.out.println(c.msg);
for (int i = commands.size() - 1; i >= 0; i--) {
commands.get(i).undo();
}
System.out.println(c.msg);
}
}