浏览 853 次
|
精华帖 (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();
}
}
最后一个书上面的示例
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-06-23
我觉得struts1的action处理就是一种命令模式
|
|
| 返回顶楼 | |
|
最后更新时间:2008-06-23
书里面这个图看起来很眼熟
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-10
struts的action应该是基于请求驱动的MVC框架, webwork/xwork才是实现了command模式的例子
|
|
| 返回顶楼 | |






