微信扫一扫

028-83195727 , 15928970361
business@forhy.com

命令模式(Command) Java

2016-06-08



命令模式(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