参考: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(); } }
最后一个书上面的示例