美文网首页
Java设计模式之-命令模式(Command)

Java设计模式之-命令模式(Command)

作者: Mock2052 | 来源:发表于2017-12-11 23:19 被阅读0次

    命令模式将着眼点放在了一个命令,或更准确来说,用英文单词Command来表示,它是一发命令,一条指令,一次操作,一个动作。命令模式就是希望将Command的具体方法,封装在一个具体类中,然后通过对这个类的串联、封装、调用等进行原子化的操作或逆操作(撤销)将Command运用起来。

    我们先来看一下命令模式的UML设计图:


    命令模式

    网上很多文章其实对Receive这个角色的意义没有正确地认识。它实际上作为方法(Action)的封装,更多地应该是用来作为回调方法储存业务逻辑的。

    其实一个按钮(Button)的点击就可以看成一个命令模式,当我点击(click)时,其实后端调用了它所绑定的onClick方法,这个方法具体会执行什么代码,则是在Receiver中预先定义好的Action方法完成的。

    public abstract class OnClickCommand{
        public abstract void onClick();
    }
    
    public class ConcreteClickCommand extends OnClickCommand{
        private Receiver receiver;
    
        public ConcreteClickCommand(Receiver r){
            this.receiver = r;
        }
        public void onClick(){
            receiver.action();
        }
    }
    

    当Invoker发生了Click操作时,就会调用Command的onClick方法进行反馈。而我们需要首先实现Receiver的Action并与ConcreteCommand绑定:

    public class Receiver{
        public void action(){
            System.out.println("Someone clicks me!");
        }
    }
    

    在main函数中将Receiver的实例传入ConcreteClickCommand中,甚至于更经常的,我们使用匿名类实现方法并传入Command中。这样我们便使用了Command方法完成了一个Button被Click之后的回调。

    这一过程实现了两点:

    1. 将方法封装在一个类中
    2. 将调用者与方法的实现者完全隔离

    另外我们可以灵活的使用命令模式搭配其他设计模式进行如下操作:

    • 配合组合模式,可以实现的制作和执行;
    • 配合备忘录模式,可以实现一个命令的撤销;
    • 与单例模式和原型模式轮流切换,实现命令状态的保存和复制;

    相关文章

      网友评论

          本文标题:Java设计模式之-命令模式(Command)

          本文链接:https://www.haomeiwen.com/subject/nlvwixtx.html