设计模式—命令模式

废话不多说:
命令模式
命令模式

命令模式顾名思义:就是通过命令来进行方法的调用,业务的处理。

看以上的uml图,你会觉得十分难看懂,一个简单的命令怎么生出那么多东西呢!!!!

其实我一开始也没看懂,看到代码后也觉得是脱裤子放屁——多此一举。现在我也觉得是这样。

我来用自己的思考来讲一讲命令模式:

1.既然是命令那么,自然有命令类(Command)
2.使用命令的人需要知道有什么命令
3.命令需要被处理(Receiver)
4.既然命令需要被处理,那么命令类就需要建立命令与处理类之间的关系
5.提供一个统一的命令调用方法

以上逻辑关系理解后,我们根据逻辑进行代码:
1.命令类

interface Command{
      excute();
}

2.处理类(先有处理方法,然后才能按处理调用):

class Receiver1{
      handle(){
            //处理代码
      }
}
class Receiver2{
      handle(){
            //处理代码
      }
}

3.具体命令类:

class ConcreteCommand implements   {

                   excute(Receiver1 receiver1){
                         receiver1.handle();
                   }
                   excute(Receiver2 receiver2){
                         receiver2.handle();
                   }
}

4.调用类:

class Invoker{
          Command command
          //设置有哪些命令(可以自己内置)
          setCommand(Command command){
                this.command = command;
          }
          //执行命令 Receiver1可以抽象出一个 Receiver类
          excuteCommand(Receiver1  receiver1 ){
               command.excute(receiver1 );
          }
}

5.使用者:

Invoker invoker = new Invoker();
ConcreteCommand  concreteCommand  = new ConcreteCommand();
invoker.setCommand(concreteCommand );
invoker.excuteCommand(new Receiver1());

以上就是代码了,看不懂吧?我也有点蒙蔽,其实命令模式完全可以这样写:

//处理类,进行具体的逻辑处理
receiver1 = function(a,b){
    return a + b
}
receiver2 = function(a,b){
    return a - b
}
receiver3 = function(a,b){
    return a * b
}

//命令类,定义命令与其处理函数
Command = {
    "add": function (obj) {
        return receiver1(obj.a,obj.b);
    },
    "minus": function (obj) {
        return receiver2(obj.a,obj.b);
    },
    "multi": function (obj) {
        return receiver3(obj.a,obj.b);
    }
}
//调用命令类,提供调用命令统一入口
Invoker = function(command,obj){
    Command[command](obj);
}
//调用
Invoker("add",Obj1);
Invoker("minus",Obj2);

以上就好理解了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值