标签:设计模式
命令模式的英文原文是:Encapsulate a request as an object, thereby letting you parameterize clients with different request, queue lor log request, and support undoable operations.意思是:将一个请求封装成一个对象,从而让你使用不同的请求将客户端参数化,对请求排队或记录请求日志,可以提供命令的撤销和恢复功能。
命令模式的四个角色:
命令角色(Command):声明需要执行的命令,是具体命令类的一个抽象。
具体命令角色(ConcreteCommand):定义一个接受者和行为之间的弱耦合,实现命令方法,并调用接受者相应的操作。
调用者角色(Invoker):接收到命令,并执行命令。
接受者角色(Receiver):负责具体实施和执行一个请求。
命令模式的类图:
各个角色对应的类:
命令接口:
package com.zz.command; /** * 命令接口 * Copyright 2015年5月16日 * created by txxs * all right reserved */ public interface Command { //执行命令的方法 public void execute(); }
package com.zz.command; /** * 具体命令类 * Copyright 2015年5月17日 * created by txxs * all right reserved */ public class ConcreteCommand implements Command { //执行命令的receiver private Receiver receiver; //利用构造函数接受参数 public ConcreteCommand(Receiver receiver){ this.receiver = receiver; } @Override public void execute() { this.receiver.doSomething(); } }
package com.zz.command; /** * 调用者 * Copyright 2015年5月16日 * created by txxs * all right reserved */ public class Invoker { private Command command; //设置调用者 public void setCommand(Command command){ this.command =command; } //执行命令 public void action(){ this.command.execute(); } }
package com.zz.command; /** * 执行者 * Copyright 2015年5月16日 * created by txxs * all right reserved */ public class Receiver { //执行的操作 public void doSomething(){ //执行的动作 } }
package com.zz.command; /** * 测试类 * Copyright 2015年5月16日 * created by txxs * all right reserved */ public class Client { public static void main(String args[]){ //调用者 Invoker invoker = new Invoker(); //接受者 Receiver receiver = new Receiver(); //定义一个发给接受者的命令 Command command = new ConcreteCommand(receiver); invoker.setCommand(command); invoker.action(); } }
1、类间解耦,命令模式将发出请求的对象和执行请求的对象解耦。
2、可扩展性,由于发起命令的对象和具体的实现完全解耦,因此扩展新的命令就很容易,只需要实现新的命令对象,然后在装配的时候,把具体的实现对象设置到命令对象 中,然后就可以使用这个命令对象,已有的实现完全不用变化。
标签:设计模式
原文地址:http://blog.csdn.net/maoyeqiu/article/details/45798507