码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式开始--命令模式

时间:2015-04-02 18:38:12      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

命令模式

一、作用

将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。分离变化与不变的因素。在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把这种专门的类称作command类。

Command模式可应用于

  • 整个调用过程比较繁杂,或者存在多处这种调用。这时,使用Command类对该调用加以封装,便于功能的再利用。
  • 调用前后需要对调用参数进行某些处理。
  • 调用前后需要进行某些额外处理,比如日志,缓存,记录历史操作等。

二、类图

技术分享

三、实现

 (1)命令的真正实施者

技术分享
public class Receiver {
    public void action()
    {
        System.out.println("do some work");
    }
}
View Code

(2)有哪些命令,指定调用实施者

技术分享
public abstract class Command {
    protected Receiver receiver;
    public Command(Receiver receiver)
    {
        this.receiver = receiver;
    }
    public abstract void execute();
}
public class ConcrectCommand extends Command {
    public ConcrectCommand(Receiver receiver) {
        super(receiver);
    }
    @Override
    public void execute() {
        receiver.action();
    }
}
View Code

(3)调用命令的调用者,传入命令即可

技术分享
public class Invoker {
    private Command command;
    public Invoker(Command command)
    {
        this.command = command;
    }
    public void execute()
    {
        command.execute();
    }
}
View Code

(4)Client 客户端 测试类

技术分享
public class Client {
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Command command = new ConcrectCommand(receiver);
        Invoker invoker = new Invoker(command);
        invoker.execute();
    }
}
View Code

 

设计模式开始--命令模式

标签:

原文地址:http://www.cnblogs.com/sunshisonghit/p/4387486.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!