设计模式应用场景
认为是命令的地方都可以使用命令模式
注意事项:命令模式需要有恢复操作
实现方式
将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
代码实现:
1.创建命令抽象类
运行和撤回方法
public abstract class Command {
public abstract void run();
public abstract void undo();
}
2.创建数据
public class Content {
String msg = "Hello Command";
}
3.创建命令实现
复制命令:Copy
public class CopyCommand extends Command {
Content c;
public CopyCommand(Content c) {
this.c = c;
}
@Override
public void run() {
c.msg = c.msg + c.msg;
}
@Override
public void undo() {
c.msg = c.msg.substring(0, c.msg.length()/2);
}
}
新增命令:Insert
public class InsertCommand extends Command {
Content c;
String strToInsert = "Wind";
public InsertCommand(Content c) {
this.c = c;
}
@Override
public void run() {
c.msg = c.msg + strToInsert;
}
@Override
public void undo() {
c.msg = c.msg.substring(0, c.msg.length()-strToInsert.length());
}
}
删除目录:Delete
public class DeleteCommand extends Command {
Content c;
String deleted;
public DeleteCommand(Content c) {
this.c = c;
}
@Override
public void run() {
deleted = c.msg.substring(0, 5);
c.msg = c.msg.substring(5, c.msg.length());
}
@Override
public void undo() {
c.msg = deleted + c.msg;
}
}
4.测试
public static void main(String[] args) {
Content c = new Content();
Command copy = new CopyCommand(c);
Command delete = new DeleteCommand(c);
Command insert = new InsertCommand(c);
System.out.println(c.msg);
copy.run();
System.out.println(c.msg);
copy.undo();
System.out.println(c.msg);
delete.run();
System.out.println(c.msg);
delete.undo();
System.out.println(c.msg);
insert.run();
System.out.println(c.msg);
insert.undo();
System.out.println(c.msg);
}
结果: