入门设计模式之命令模式

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80904478 学习更多设计模式请参考:入门设计模式之汇总篇 命令模式:把命令包装成对象,将命令发送者和命令接受者的耦合降低举个例子,皇帝发圣旨招一个大臣入宫。
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80904478


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


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


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

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



我们看一下这个类图:

  • 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,转载请保留。


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


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


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

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



我们看一下这个类图:

  • 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,转载请保留。


相关文章
|
4月前
|
设计模式 UED
二十三种设计模式:解锁软件开发的神器:命令模式与撤销重做功能
二十三种设计模式:解锁软件开发的神器:命令模式与撤销重做功能
|
4月前
|
设计模式 小程序 Java
Java设计模式【十五】:命令模式
Java设计模式【十五】:命令模式
23 0
|
6月前
|
设计模式 敏捷开发 C++
行为型设计模式07-命令模式
行为型设计模式07-命令模式
20 0
|
6月前
|
设计模式 语音技术
设计模式12 - 命令模式【Command Pattern】
设计模式12 - 命令模式【Command Pattern】
25 0
|
3月前
|
设计模式 监控 安全
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
62 0
|
12天前
|
设计模式 Java
23种设计模式,命令模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】命令模式是一种行为设计模式,它将请求或简单操作封装为一个对象。这种模式允许用户通过调用对象来参数化其他对象的方法,并能保存、排队和执行方法调用。
17 1
|
4月前
|
设计模式 存储 Java
认真学习设计模式之命令模式(Command Pattern)
认真学习设计模式之命令模式(Command Pattern)
77 0
|
1月前
|
设计模式 存储 Java
【设计模式】命令模式
【设计模式】命令模式
|
3月前
|
设计模式 Java
设计模式-命令模式
设计模式-命令模式
33 1
|
3月前
|
设计模式 Java
设计模式-命令模式(Command)
设计模式-命令模式(Command)
32 0