设计模式java——命令模式

命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

命令模式Demo:

/**
 * 2018年4月6日下午11:15:26
 */
package com.Designpattern;

import java.util.ArrayList;
import java.util.List;

/**
 * @author xinwenfeng
 *
 */
public class TestCommand {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Receiver r = new Receiver();
		MyCommand mc1 = new Command1(r);
		MyCommand mc2 = new Command2(r);
		CommandInvoker invoker1 = new CommandInvoker();
		invoker1.setCommand(mc1);
		invoker1.excuteCommand();
		invoker1.setCommand(mc2);
		invoker1.excuteCommand();
		System.out.println("=====================");
		CommandInvoker2 invoker2 = new CommandInvoker2();
		invoker2.addCommand(mc1);
		invoker2.addCommand(mc2);
		invoker2.excuteCommand();
		System.out.println("remove mc1");
		invoker2.removeCommand(mc1);
		invoker2.excuteCommand();
	}

}
class Receiver{
	public void runCommand(String s) {
		System.out.println("执行命令:"+s);
	}
}
abstract class MyCommand{
	protected Receiver receiver;
	public MyCommand(Receiver r) {
		this.receiver = r;
	}
	abstract void excute();
}
class Command1 extends MyCommand{
	
	public Command1(Receiver r) {
		super(r);
	}
	
	@Override
	void excute() {
		receiver.runCommand("ls -hl");
	}
	
}
class Command2 extends MyCommand{
	
	public Command2(Receiver r) {
		super(r);
	}
	
	@Override
	void excute() {
		receiver.runCommand("nohup java -jar HelloWorld.jar &");
	}
	
}
class CommandInvoker{
	private MyCommand command;

	public void setCommand(MyCommand command) {
		this.command = command;
	}
	
	public void excuteCommand() {
		command.excute();
	}

}
class CommandInvoker2{
	private List<MyCommand> commandList = new ArrayList<>();//命令列表

	public void addCommand(MyCommand command) {//添加命令
		commandList.add(command);
	}
	
	public void removeCommand(MyCommand command) {//撤销命令
		commandList.remove(command);
	}
	
	public void excuteCommand() {
		for(MyCommand c:commandList) {//统一执行多条命令
			c.excute();
		}
	}

}

结果:


猜你喜欢

转载自blog.csdn.net/flylikebutterfly/article/details/79838135
今日推荐