码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式 - 命令模式(command pattern) 详解

时间:2014-06-10 08:01:53      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:mystra   设计模式   命令模式   简单实现   java   

命令模式(command pattern) 详解


本文地址: http://blog.csdn.net/caroline_wendy


命令模式(command pattern) : 将请求封装成对象, 以便使用不同的请求\队列\日志来参数化其他对象.

命令模式也可以支持撤销操作.


简单的命令模式的实现:

1. 具体的类, 每一个类都有特定的方法:

/**
 * @time 2014年6月9日
 */
package command;

/**
 * @author C.L.Wang
 *
 */
public class Light {

	public Light() {}
	
	public void on() {
		System.out.println("Light is on");
	}
	
	public void off() {
		System.out.println("Light is off");
	}
	
}


/**
 * @time 2014年6月9日
 */
package command;

/**
 * @author C.L.Wang
 *
 */
public class GarageDoor {
	
	public GarageDoor() {}

	public void up() {
		System.out.println("Garage Door is Open");
	}

	public void down() {
		System.out.println("Garage Door is Closed");
	}

	public void stop() {
		System.out.println("Garage Door is Stopped");
	}

	public void lightOn() {
		System.out.println("Garage light is on");
	}

	public void lightOff() {
		System.out.println("Garage light is off");
	}
}



2. 命令接口, 提供所有命令的接口, 具体命令继承接口, 并实现方法:

/**
 * @time 2014年6月9日
 */
package command;

/**
 * @author C.L.Wang
 *
 */
public interface Command {
	public void execute();
}

2. 具体的命令实现, 即把具体类的函数, 封装入命令接口:

/**
 * @time 2014年6月9日
 */
package command;

/**
 * @author C.L.Wang
 *
 */
public class LightOnCommand implements Command {

	Light light;
	
	public LightOnCommand (Light light) {
		this.light = light;
	}
	
	/* (non-Javadoc)
	 * @see command.Command#execute()
	 */
	@Override
	public void execute() {
		// TODO Auto-generated method stub
		light.on();
	}

}


/**
 * @time 2014年6月9日
 */
package command;

/**
 * @author C.L.Wang
 *
 */
public class GarageDoorOpenCommand implements Command {
	
	GarageDoor garageDoor;
	
	public GarageDoorOpenCommand (GarageDoor garageDoor) {
		this.garageDoor = garageDoor;
	}
	
	/* (non-Javadoc)
	 * @see command.Command#execute()
	 */
	@Override
	public void execute() {
		// TODO Auto-generated method stub
		garageDoor.up();
	}

}

3. 接受者, 执行请求, 传入命令参数, 统一执行命令:

/**
 * @time 2014年6月9日
 */
package command;

/**
 * @author C.L.Wang
 *
 */
public class SimpleRemoteControl {
	
	Command slot;
	
	public SimpleRemoteControl() {}
	
	public void setCommand(Command command) {
		this.slot = command;
	}
	
	public void buttonWasPressed() {
		slot.execute();
	}
}

4. 执行类, 新建具体类, 新建具体命令, 把具体命令传入接收者类, 执行统一动作:

/**
 * @time 2014年6月9日
 */
package command;

/**
 * @author C.L.Wang
 *
 */
public class RemoteControlTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SimpleRemoteControl remote = new SimpleRemoteControl();
		Light light = new Light();
		GarageDoor garageDoor = new GarageDoor();
		LightOnCommand lightOn = new LightOnCommand(light);
		GarageDoorOpenCommand garageOpen = 
				new GarageDoorOpenCommand(garageDoor);
		
		remote.setCommand(lightOn);
		remote.buttonWasPressed();
		remote.setCommand(garageOpen);
		remote.buttonWasPressed();
		
	}

}

5. 输出:

Light is on
Garage Door is Open



bubuko.com,布布扣




设计模式 - 命令模式(command pattern) 详解,布布扣,bubuko.com

设计模式 - 命令模式(command pattern) 详解

标签:mystra   设计模式   命令模式   简单实现   java   

原文地址:http://blog.csdn.net/caroline_wendy/article/details/29608879

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!