命令模式command
//----------------真正的命令执行者-----------------------
package java_246_GOF23设计模式_命令模式_数据库事务机制底层架构实现_撤销和回复_练习;
/**
真正的命令执行者
/
public class Receiver {//Receiver接受者
void action(){//action行动
System.out.println(“Receiver.action()”+";战士正在执行命令");
}
}
//--------------发布命令者---------------
package java_246_GOF23设计模式_命令模式_数据库事务机制底层架构实现_撤销和回复_练习;
/
-
发布命令者
/
public interface Command {//Command领导
/*- 这个方法是一个返回结果为空的方法
- 实际项目中,可以根据需求设计多个不同的方法
*/
void execute();//execute执行
}
//实现类;ConcreteCommand具体命令
class ConcreteCommand implements Command{
private Receiver receiver;//命令的真正执行者
public ConcreteCommand(Receiver receiver) {
super();
this.receiver = receiver;
}public void execute() {
//这里可以做;命令真正执行前或后,执行相关的处理;如:记录日志等等
receiver.action();//调用真正执行者
}
}
//-------------------命令的调用者-------------
package java_246_GOF23设计模式_命令模式_数据库事务机制底层架构实现_撤销和回复_练习;
/**
*命令的调用者
*/
public class Invoke {//Invoke调用
//发起什么样的命令
private Command command;//可以是一条也可以是多条;通过容器包含进去;List容器加入多个命令对象
//进行批处理;数据库底层的事务管理就是类似的结构public Invoke(Command command) {
super();
this.command = command;
}
//创建业务方法,用于调用命令类的方法
public void call(){//execute呼叫
command.execute();
}
}
//--------------------测试-----------------------
package java_246_GOF23设计模式_命令模式_数据库事务机制底层架构实现_撤销和回复_练习;
public class Client {
public static void main(String[] args) {
Command c = new ConcreteCommand(new Receiver());
Invoke i = new Invoke©;//真正的调用者
i.call();
new Receiver().action();//也可以这样写,结果一样;但扩展性没有上面的代码好,无法适应各种变化
}
}
//---------------结果------------------
类图