论坛首页 Java企业应用论坛

Command命令模式

浏览 6491 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-06-22  

 

参考:http://www.jdon.com/designpatterns/command.htm

还在看大话设计模式,今天偶然翻到命令模式,所以写写~~下面的内容均和此书有关。

 

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

 

优点:解耦了发送者和接受者之间联系。

缺点:1个类变成3个类,多了好多类。

 

主要集中到这个原型图command命令模式原型

Invoker类 被客户端调用,可以接受命令请求,设计命令队列,决定是否相应该请求,记录或撤销或重做命令请求,记录日志等等.

public class Invoker {
	private Command command;

	public void setOrder(Command command) {
		this.command = command;
	}
	public void ExecuteCommand() {
		command.ExecuteCommand();
	}

}

 Command类,将一个请求封装成一个对象,将一个请求具体化,方便对请求记录。

public abstract class Command {
	protected Receiver receiver;
	
	public Command(Receiver receiver){
		this.receiver = receiver;
	}
	
	public abstract void ExecuteCommand();
}

 ConcreteCommand类,可以将Receiver对象放到这个类里面,这个类具体实现了要怎么处理这个用户的请求。

public class ConcreteCommand extends Command {
	
	public ConcreteCommand(Receiver receiver){
		super(receiver);
	}

	@Override
	public void ExecuteCommand() {
		receiver.Execute();
	}

}

 Receiver类,其实这个类可以没有,不过为了让设计看起来更整洁清楚。

public class Receiver {
	public void Execute(){
		System.out.println("Receiver excute!");
	}
}

 最后一个Client类。

public class Client {
	public static void main(String[] args) {
		Receiver r = new Receiver();
		Command c = new ConcreteCommand(r); 
		Invoker i = new Invoker();

		i.setOrder(c);
		i.ExecuteCommand();
	}
}

 最后一个书上面的示例

命令模式示例

   发表时间:2008-06-23  
书里面这个图看起来很眼熟
0 请登录后投票
   发表时间:2008-07-10  
struts的action应该是基于请求驱动的MVC框架, webwork/xwork才是实现了command模式的例子
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics