命令模式(Command):
将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。
类图:
代码:
Receiver执行类
package ding.study.designpatterns.command;
/**
* 具体执行类
*
* @author daniel
*
*/
public class Receiver {
public void action() {
System.out.println("执行请求");
}
}
Command
package ding.study.designpatterns.command;
/**
* 命令类抽象
*
* @author daniel
*
*/
abstract class Command {
// 执行类属性
protected Receiver receiver;
public Command(Receiver receiver) {
this.receiver = receiver;
}
// 调用执行类的执行方法
abstract public void execute();
}
CommandImpl
package ding.study.designpatterns.command;
/**
* 具体命令实现类
* @author daniel
* @email 576699909@qq.com
* @time 2016-6-8 上午11:11:32
*/
public class CommandImpl extends Command {
/**
* 调用父类构造方法
*
* @param receiver
*/
public CommandImpl(Receiver receiver) {
super(receiver);
}
/**
* 执行具体方法
*/
@Override
public void execute() {
receiver.action();
}
}
Invoker
package ding.study.designpatterns.command;
/**
* 命令发起者
* @author daniel
* @email 576699909@qq.com
* @time 2016-6-8 上午11:12:33
*/
public class Invoker {
private Command command;
/**
* @param command
* the command to set
*/
public void setCommand(Command command) {
this.command = command;
}
/**
* 调用命令类执行方法
*/
public void executeCommand() {
command.execute();
}
}
Zmain
package ding.study.designpatterns.command;
/**
* 命令模式(Command):
将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。
* @author daniel
* @email 576699909@qq.com
* @time 2016-6-8 上午11:13:46
*/
public class Zmain {
/**
*
* //执行具体命令 调用类>命令类>命令实现类>执行类
* @author daniel
* @time 2016-6-8 上午11:12:52
* @param args
*/
public static void main(String[] args) {
// 执行类
Receiver r = new Receiver();
// 命令实现类 装载具体执行类
Command c = new CommandImpl(r);
// 调用命令类
Invoker i = new Invoker();
// 装载命令类
i.setCommand(c);
// 执行具体命令 调用类>命令类>命令实现类>执行类
i.executeCommand();
}
}
输出结果:
执行具体命令 调用类>命令类>命令实现类>执行类
执行请求
源码
https://github.com/dingsai88/StudyTest/tree/master/src/ding/study/designpatterns/command