入门设计模式之命令模式

Posted zhixiang-org-cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了入门设计模式之命令模式相关的知识,希望对你有一定的参考价值。

 

学习更多设计模式请参考:入门设计模式之汇总篇 

 

命令模式:把命令包装成对象,将命令发送者和命令接受者的耦合降低

 

举个例子,皇帝发圣旨招一个大臣入宫。

这里的皇帝就是客户端,而圣旨就是命令,大臣就是命令接受者。那么命令发送者通常都是某个公公对吧。这里就是一个命令模式的实践,为什么这样说呢?平常我们写代码都是一个方法直接调用另一个方法,这样耦合性太高了,你总不能让皇帝跑到大臣家告诉他找他有点事吧,要是都这样皇帝不就累死了。皇帝要做的就是指定命令交个哪一个公公,让公公这个命令发送者带着这个命令去找命令接受者,皇帝就在皇宫等着大臣来就行了,而不用关心这从命令交给发送者到命令接受者接收到命令的时候发生了什么。

 

 

技术分享图片

我们看一下这个类图:

  • Client:皇帝,也就是客户端角色。他指定了圣旨的内容,谁是命令发送人,谁是命令接受者。
  • Request:公公,也就是命令发送者,他负责带着命令去找接受者
  • Command:命令接口,例如说所有的圣旨都要有奉天承运,皇帝诏曰等等。
  • Command:具体命令,在这里就是宣这个大臣进宫的圣旨
  • Reception:命令接受者,命令接受者,也就是大臣了。

 

下面来看一下代码

public class Client {
    public static void main(String args[]){
        Reception reception=new Reception();
        Command command=new CommandImpl(reception);
        Request request=new Request(command);
        request.action();
    }
}

public class Request {
    private Command command;

    public Request(Command command){
        this.command=command;
    }

    public void action(){
        command.excute();
    }
}

public interface Command {
    public void excute();
}

public class CommandImpl implements Command {

    private Reception reception;

    public CommandImpl(Reception reception){
        this.reception=reception;
    }
    @Override
    public void excute() {
        reception.action();
    }
}

public class Reception {
    public void action(){
        System.out.println("臣接旨...");
    }
}

这样的一个简单的例子就是入门命令模式的demo了,你get到了么?




本文出自https://zhixiang.org.cn/#/blog/read/4d633838-4663-4cb3-9239-ee5a3c69c23c,转载请保留。

 




以上是关于入门设计模式之命令模式的主要内容,如果未能解决你的问题,请参考以下文章

入门设计模式之装饰

入门设计模式之策略

入门设计模式之汇总篇

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段

Rust编程语言入门之模式匹配

linux三剑客之sed入门详解