“命令模式”详细分析

1,说一下什么是命令模式

答:命令模式是一种行为型的设计模式,为了实现请求者和接收者(执行者)的解耦,将请求的调用封装成一个命令对象,由命令对象来通知并让接收者完成相应的任务。

2,命令模式有哪几个关键对象

答:命令模式中主要包含了三个对象:

“命令类”--订单(也就是实现统一命令接口的命令),

“执行者”--厨师(也就是真正执行命令的人),

“命令调用者”--服务员(进行命令传递的人)

3,举个例子解释一下

这里应该先配一张图

答:先说一下原来的开发方式,传统的方法调用就是直接调用,比如:客户让厨师做一个汉堡,那么他需要新建一个厨师对象,然后调用该对象的创建汉堡,如下

// 厨师类
public Class 厨师 {
    public void 创建汉堡(){
        System.out.print("做了一个汉堡");
    }
}

// 客户类
public Class 客户 {
    public static void main(String[] args){
        厨师 厨师对象 = new 厨师();
        厨师对象.创建汉堡();
    }
}

命令模式就是将 “客户让厨师做一个汉堡”,中的“让厨师做一个汉堡”封装成一个命令,然后交给服务员(也就是命令调用类)去处理,也就变成了 “客户(请求者)告诉服务员(命令调用类)他的订单:让厨师做一个汉堡(命令对象),然后服务员(命令调用类)告知厨师(接收者(执行者))这个订单(命令对象)”,具体实现如下

// 厨师类(接收者/执行者)
public class 厨师 {
    public void 创建汉堡(){
        System.out.print("做了一个汉堡");
    }
}

// 订单(命令对象的接口)
public interface 订单 {void 执行();}
// 创建汉堡的命令(命令对象的实现)
public class 创建汉堡 implements 订单 {
    
    private 厨师 厨师对象; // 厨师对象(接收者/执行者)
    
    创建汉堡(厨师 厨师对象){ // 构造方法
        this.厨师对象 = 厨师对象;
    }
    
    public void 执行(){
        this.厨师对象.创建汉堡();
    };
}


// 服务员类(命令调用者)
public class 服务员 {
    
    List<订单> 订单数组 = new List<订单>();
    
    public void 点菜(订单 订单对象) {
        订单数组.add(订单对象);
    }
    
    public void 提交订单() {
        for(订单 单个订单:订单数组) {
            单个订单.执行();
        }
        订单数组.clear();
    }
}

// 客户类
public class 客户 {
    public static void main(String[] args){
        // 想要一个汉堡:原来的方式
        // 厨师 厨师对象 = new 厨师();
        // 厨师对象.创建汉堡();
        
        // 想要一个汉堡:现在的方式
        服务员 服务员对象 = new 服务员();
        
        厨师 厨师对象 = new 厨师();
        创建汉堡 创建汉堡命令 = new 创建汉堡(厨师对象);
        
        服务员对象.点菜(创建汉堡命令);
        服务员对象.提交订单(); // 这时汉堡就出来了
    }
}

4,命令模式所关注的点是什么呢

答:传统方式中,客户想要汉堡,那么他需要知道厨师对象中有创建汉堡的方法,而命令模式的是实现是,客户不再关心厨师对象内部有什么方法,客户只需要知道菜单上有个创建汉堡的命令,然后告诉服务员我需要调用这个命令即可。

简单说就是,原先调用方法需要创建对象来执行方法,而现在可以直接将方法丢出,让其他程序来帮忙执行方法,降低代码耦合度

5,用于实践的命令模式

应用于实践的地方有很多,比如

1,消息通道或者消息队列

当大量的命令需要执行,但是这些命令又对时限没有要求,此时通过消息队列来传递命令对象,再由固定数量的线程来接收并执行相应的命令,此时线程并不需要了解命令对象所执行的操作内容。这是典型的命令模式。

2,事务的处理

在我们进行事务处理时,经常做的操作就是,将一组命令提交到事务组,再由事务统一提交执行,这就是将命令统一提交执行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值