浏览 6519 次
锁定老帖子 主题:Command命令模式
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-22
参考:http://www.jdon.com/designpatterns/command.htm 还在看大话设计模式,今天偶然翻到命令模式,所以写写~~下面的内容均和此书有关。
命令模式(Command),将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
优点:解耦了发送者和接受者之间联系。 缺点:1个类变成3个类,多了好多类。
主要集中到这个原型图 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(); } } 最后一个书上面的示例
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-23
书里面这个图看起来很眼熟
|
|
返回顶楼 | |
发表时间:2008-07-10
struts的action应该是基于请求驱动的MVC框架, webwork/xwork才是实现了command模式的例子
|
|
返回顶楼 | |