命令模式

一、模式提出

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值