国庆假期最后一天了,今天我们再来讲一个设计模式,命令模式。这个模式,相信各位程序员朋友都曾经使用过,只是你还有可能没有理解它的核心思想。
这几年随着物联网越来越发达,这种场景越来越常见了,我们可以通过语音来控制全家的家电,小米、华为、阿里跟百度,都是在这方面做的比较好的,通过一个智能音箱或者智能手机,可以随便打开电视,开关空调等等。那么,你有没有想过这么一个问题,为什么这些物联网的智慧中心知道如何去关闭你家的智能设备呢?在代码上应该是什么样的架构,如何进行设计呢?
我们我们知道,市面上的智能设备非常多,厂商也非常多,每个厂商可能的标准都不一样,如果我们来开发一个物联网智慧中心,我们不可能去学习所有厂商的API接口,学习他们的代码,一来成本非常地高,二来实现起来非常的复杂,即使是同一个厂商,可能不同的设备都有不同的逻辑,开发成本巨大。
这个时候就要祭出我们的设计模式了,命令模式。命令模式是一种数据驱动的设计模式,它属于行为型模式。它将请求封装成对象,执行者不用关心里面的具体实现逻辑,只要进行执行就可以了。在现在的物联网开放平台上,也是这么实现的,厂商去对应的开放平台上,申请一个命令,编写相应的代码,至于物联网智慧中心,它并不关心具体的代码实现,只知道你家的智能空调绑定了这个命令,直接使用这个命令即可。
可能到这里你还有点懵,这讲得都是什么玩意。我们再通过一个耳熟能详的例子。相信大家都有使用过线程池的使用经验。无论是JAVA也好,C++也好,大多数的线程池都是这样使用的。你创建一个类,去实现某一个接口,例如Java中的Runnable。然后你就可以将这个类放入线程池的队列当中了。
这实际上就是一个典型的命令模式,对于线程池来说,只关心线程的调度,队列的大小,线程数量这些,不用关心具体举行的任务,只知道调用对应的执行方法即可。对于命令本身,只关心自身的逻辑,不用关心线程如何调度。这就非常好的将命令的请求者与命令的执行者进行解耦了!
总结
好了,今天我们学习了命令模式,是不是很亲切,原来我们一直都在使用!欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)
网友评论