设计模式(14)-行为型模式-command模式
别名:Action或者Transaction 1.1.1功能Command模式通过将请求封装到一个对象(Command)中,并将请求的接受者(Receiver)存放到具体的ConcreteCommand类中中,从而实现调用操作的对象和操作的具体实现者之间的解耦。 1.1.2结构图与协作关系备注:我认为这张图应该在client与Invoker直接也画条线(箭头指向Invoker)可能更好一点. ? C o m m a n d — 声明执行操作的接口。 ? C o n c r e t e C o m m a n d ( P a s t e C om m a n d,Op e n C o m m a n d ) — 将一个接收者对象绑定于一个动作。 — 调用接收者相应的操作,以实现E x e c u t e。 ? C l i e n t ( A p p l i c t i o n ) — 创建一个具体命令对象并设定它的接收者。 ? Invoker ( M e n u I t e m ) — 要求该命令执行这个请求。 ? R e c e i v e r ( D o c u m e n t,A p p li c a t i o n ) — 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。 协作关系:
?C l i e n t创建一个Co n c r e t e C o m m a n d对象并指定它的Re c e i v e r对象。 1.1.3Java源代码接收者角色类 1. public class Receiver { 2. /** 3. * 真正执行命令相应的操作 4. */ 5. public void action(){ 6. System.out.println("执行操作"); 7. } 8. } 抽象命令角色类 1. public interface Command { 2. /** 3. * 执行方法 4. */ 5. void execute(); 6. } 具体命令角色类 1. public class ConcreteCommand implements Command { 2. //持有相应的接收者对象 3. private Receiver receiver = null; 4. /** 5. * 构造方法 6. */ 7. publicConcreteCommand(Receiver receiver){ 8. this.receiver = receiver; 9. } 10. @Override 11. public void execute() { 12. //通常会转调接收者对象的相应方法,让接收者来真正执行功能 13. receiver.action(); 14. } 15. 16.} 请求者角色类 1. public class Invoker { 2. /** 3. * 持有命令对象 4. */ 5. private Command command = null; 6. /** 7. * 构造方法 8. */ 9. public Invoker(Commandcommand){ 10. this.command = command; 11. } 12. /** 13. * 行动方法 14. */ 15. public void action(){ 16. 17. command.execute(); 18. } 19.} 客户端角色类 1. public class Client { 2. 3. public static void main(String[] args) { 4. //创建接收者 5. Receiver receiver = new Receiver(); 6. //创建命令对象,设定它的接收者 7. Command command = newConcreteCommand(receiver); 8. //创建请求者,把命令对象设置进去 9. Invoker invoker = new Invoker(command); 10. //执行方法 11. invoker.action(); 12. } 13. 14.} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |