`
he_wen
  • 浏览: 234397 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

命令模式

阅读更多

一、模式提出

 将一个请求封装为一个对象,从而使你可用不同的请求对客户惊醒参数化;请求排队或记录请求日志,以及支持可撤销操作。

1、它能够较容易地设计一个命令队列;

               2、在需要的情况下,可以较容易的将命令记入日志;

3、允许接受请求的一方是否要否决请求

二、业务逻辑背景

男孩子有一个女孩子,然后女孩子要自己的男友做一列相关的事情如:买鲜花给他、陪她逛街、打个小kiss等等,即女孩子下发命令,男孩子如何执行

三、UML图解

 



四、代码详解

客户端调用  

package command.com.cn;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new MM().order(new Boy());//女朋友给自己的男友下发命令
	}
}

第一个类男友类比较痛苦为自己的女友干这样的事情:哈哈

package command.com.cn;

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

public class Boy {
	private String name;
	private List<Command> commands=new ArrayList<Command>();
	//添加女友要求的命令
	public void addCommand(Command c){
		this.commands.add(c);
	}
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
   /**
    * 执行女友相关的命令
    */
	public void executeCommands() {
		for(Command c:commands){
			c.execute();
		}
		
	}
}

 第二个类娇气的女友要男生下发命令,太不公平了

package command.com.cn;

public class MM {
	private String name;
	//执行命令的是妹妹,所以在此方法要代理男友执行命令
	public void order(Boy b) {
		b.addCommand(new ShoppingComand());//妹妹要求男友买衣服
		b.addCommand(new HugCommand());//妹妹要男友亲嘴
		b.executeCommands();//执行妹妹做的要求
		
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

 第三个是一个命令接口

package command.com.cn;

public abstract class Command {
	public abstract void execute();//让女友的男友执行行动

	public abstract void undo();
}

 第四个男友执行亲嘴行动的操作类

package command.com.cn;

public  class HugCommand extends Command{

	@Override
	public void execute() {
		System.out.println("month-to-month");
	}

	@Override
	public void undo() {
		System.out.println("on way");
	}

}

 第五个男友执行逛商场行动的操作类  

package command.com.cn;

public class ShoppingComand extends Command {
	@Override
	public void execute() {
		System.out.println("go shopping buy clothing");

	}
	@Override
	public void undo() {
		System.out.println("Don't shopping");
	}

}

 

Test

  • 大小: 13.6 KB
  • Command.rar (5.5 KB)
  • 描述: 运行时代码
  • 下载次数: 2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics