频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
设计模式 - 命令模式(command pattern) 详解
2014-06-17 11:22:51         来源:设计模式 - 命令模式(command pattern) 详解  
收藏   我要投稿

命令模式(command pattern) 详解

 

命令模式: 将请求封装成对象, 以便使用不同的请求队列日志来参数化其他对象. 命令模式也支持可撤销操作.

 

命令模式:

调用者(Invoker);

命令(Command): 可执行方法(execute), 具体命令(Concrete Command);

接受者(Receiver): 调用命令(Set Command);

 

具体方法:

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. 命令接口(command interface), 包含执行方法execute().

 

 

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

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


 

3. 具体命令(concrete command), 继承命令接口, 实现接口的方法.

 

/**
 * @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();
	}

}

4. 接受者(receiver), 通过传递的命令参数, 调用执行方法.

 

 

/**
 * @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();
	}
}

5. 测试, 创建接收者, 创建对象, 将对象传递至命令, 接受者调用命令, 执行.

 

 

/**
 * @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();
		
	}

}


 

/

 

 

 

 

点击复制链接 与好友分享!回本站首页
上一篇:SpringAop之注解
下一篇:Spring之AOP简单demo
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站