设计模式-命令模式

命令模式

简单描述:对执行动作的具体细节进行封装,也就是无需关注具体的实现过程,只需要关注结果即可。

所属类型:行为型模式

适用情况:在某些场合,要对行为进行记录、撤销/重做、事务等处理

实现方法:通过调用者调用接受者执行命令。顺序:调用者->命令->接收者

关键代码:定义三个角色,1、received的真正的命令执行对象;2、Command;3、invoker使用命令的入口

优点:1、降低了系统耦合度;2、新的命令可以很容易添加到系统中去

缺点:使用命令模式可能会导致某些系统有过多的具体命令类

接下来对命令模式进行一个例子:

创建一个命令接口Command

package order;

public interface Order {
    public void execute();
}

接着创建Light对象,来作为reveived的真正的命令执行对象,也就是对灯来进行对应的开或者关的相关操作。

package order;

public class Light {

    void on() {
        System.out.println("open the light");
    }

    void off() {
        System.out.println("close the light");
    }
}

接着就是来对命令进行封装,也就是说在这里仅仅看到execute()来执行相关的操作,但是具体是进行什么操作,并不需要关注。也就是invoke要执行命令的入口。下面是进行的开灯指令。

package order;

public class OpenOrder implements Order {

    private Light light;

    public OpenOrder(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.on();
    }
}

下面是进行的关灯指令。

package order;

public class CloseOrder implements Order {

    private Light light;

    public CloseOrder(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.off();
    }
}

对应的命令都创建好了并且封装完毕,所以接下来就要进行执行操作,就要进行具体的执行命令的操作。这里是进行了一次开灯的操作和一次关灯的操作。可以看到,进行具体的操作调用的是execute的方法,里面具体干了些什么,我们就不了了之了。

package order;

public class ControlLightDemo {
    public static void main(String[] args) {
        Light light = new Light();
        OpenOrder openOrder = new OpenOrder(light);
        CloseOrder closeOrder = new CloseOrder(light);
        openOrder.execute();
        closeOrder.execute();
    }
}

下面是执行完的结果。

open the light
close the light

Tips

进行简单的总结。命令模式的设计能够很好地对执行命令的具体细节进行封装。这里写的比较简单,对应的execute方法就仅仅是执行了对应的开关灯操作。稍微复杂点进行设计,就比如在食品店的操作,可以将很多具体的实现步骤都封装在一个方法中,那么就能够很好地实现解耦。简单来说就是只看到了我的躯壳,而看不到我的内心

posted @   忠肝义胆-多隆  阅读(18)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示