命令模式
说一个二元模型
consumer 调用provider
providerA-->通过条件判断A
providerB-->通过条件判断B
providerC-->通过条件判断C
现在consumer想使用providerA|B|C这三个生产者的方法
普通模式:
不使用命令模式的情况下
我们的consumer通过判断索引来找,我们要使用哪个provider的方法
这样就出现了问题,我们的调用者和被调用者是紧耦合的
如果我们的被调用者如果新增/减少功能,或者做修改,在调用者处都要改动,我们换用命令模式来修改
说明:
命令模式的关键思路就是:使用接口来实现解耦:面向接口编程
命令模式:
我们在普通模式下,consumer想使用provider的方法,是把provider注入到consumer中的
我们现在new很多concreteCommand(命令)对象,这些对象实实在在的有方法
这些concreteCommand对象全部继承于command接口;这个接口里面会写concreteCommand实现类都会实现的方法;比如:
execute()
undo()
我们现在要在consumer里面做的就是,想要使用哪些provider里面的方法,不把这些provider作为构造器参数传入到consumer中,而是把他们的方法注入到consumer,而且consumer里面直接调用"接口"执行共同的命令
execute()
undo()
即可
是不是又有了多态的思想呢,这样,如果provider想要修改自己的任何东西,直接改其某个具体的concreteCommand就可以了 ,如果想新增,直接新增就可以了,这样就实现了与consumer的接口,consumer只面向了command接口,我们唯一要做的就是把具体的concreteCommand注入到consumer即可
tips:网上有很多遥控器的demo,有兴趣的可以看看