资讯专栏INFORMATION COLUMN

命令模式(Command)

BDEEFE / 2263人阅读

摘要:命令模式一命令模式定义对于行为请求者和行为实现者,将一组行为抽象为对象,实现二者的松耦合角色抽象命令接口具体命令最终执行命令的对象命令对象的入口二具体实现创建接口创建命令执行对象创建具体实现类创建命令入口调用输出三优缺点优点降低耦合度新增一

命令模式

一. 命令模式 1.1 定义

对于“行为请求者”和“行为实现者”,将一组行为抽象为对象,实现二者的松耦合.

1.2 角色

Command:抽象命令接口.

ConcreteCommand:具体命令.

Receiver:最终执行命令的对象.

Invoker:命令对象的入口.

二. 具体实现 1.1 创建Command接口
    public interface ICommand {
        void execute();
    }
1.2 创建命令执行对象
    public class Receiver {
        public void execute(){
            System.out.println("receiver execute ... ");
        }
    }
1.3 创建具体Command实现类
    public class ConcreteCommandA implements ICommand {
        private Receiver receiver;
        public ConcreteCommandA(Receiver receiver){
            this.receiver = receiver;
        }
        @Override
        public void execute() {
            System.out.println("ConcreteCommandA execute ...");
            receiver.execute();
        }
    }
    public class ConcreteCommandB implements ICommand {
        private Receiver receiver;
        public ConcreteCommandB(Receiver receiver){
            this.receiver = receiver;
        }
        @Override
        public void execute() {
            System.out.println("ConcreteCommandB execute ...");
            receiver.execute();
        }
    }
1.4 创建命令入口
    public class Invoker {
        private ICommand concreteCommandA, concreteCommandB;
        public Invoker(ICommand concreteCommandA, ICommand concreteCommandB){
            this.concreteCommandA = concreteCommandA;
            this.concreteCommandB = concreteCommandB;
        }
        public void orderA(){
            concreteCommandA.execute();
        }
        public void orderB(){
            concreteCommandB.execute();
        }
    }
1.5 调用
    public static void main(String[] args) {
        Receiver receiver = new Receiver();
        Invoker invoker = new Invoker(new ConcreteCommandA(receiver), new ConcreteCommandB(receiver));
        invoker.orderA();
        invoker.orderB();
    }
1.6 输出
    ConcreteCommandA execute ...
    receiver execute ... 
    ConcreteCommandB execute ...
    receiver execute ... 
三. 优缺点 3.1 优点

降低耦合度.

新增一个命令/一组命令简单.

调用同一方法实现不同功能.

3.2 缺点

会产生过多具体命令类.

四. 源码
    https://github.com/Seasons20/DisignPattern.git

END

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69589.html

相关文章

  • 一起学设计模式 - 命令模式

    摘要:命令模式属于行为型模式的一种,又称为行动模式或交易模式。结构图模式结构抽象命令类声明了用于执行请求的的等方法具体命令类抽象命令类的子类,对应具体的接收者对象,将接收者对象的动作绑定其中。 命令模式(Command Pattern)属于行为型模式的一种,又称为行动(Action)模式或交易(Transaction)模式。将一个请求封装为一个对象,从而达到用不同的请求对客户进行参数化,对于...

    BakerJ 评论0 收藏0
  • 每天一个设计模式命令模式

    摘要:作者按每天一个设计模式旨在初步领会设计模式的精髓,目前采用和两种语言实现。该对象执行命令。命令模式按钮参考设计模式和开发实践如何实现命令模式 作者按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) 原文地址是:《每天一个设计模式之命令模式》 欢迎关注个人...

    paney129 评论0 收藏0
  • 每天一个设计模式命令模式

    摘要:作者按每天一个设计模式旨在初步领会设计模式的精髓,目前采用和两种语言实现。该对象执行命令。命令模式按钮参考设计模式和开发实践如何实现命令模式 作者按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) 原文地址是:《每天一个设计模式之命令模式》 欢迎关注个人...

    lixiang 评论0 收藏0
  • JavaScript设计模式(七):命令模式

    摘要:支持撤销,队列,宏命令等功能。宏命令宏命令一组命令集合命令模式与组合模式的产物发布者发布一个请求,命令对象会遍历命令集合下的一系列子命令并执行,完成多任务。 showImg(https://segmentfault.com/img/bVbu3CN?w=800&h=600); 命令模式:请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相...

    lixiang 评论0 收藏0
  • python 设计模式-命令模式

    摘要:命令模式先来看下命令模式的定义命令模式将请求封装成对象,以便使用不同的请求队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。通过新增两个方法,命令模式能够支持这一点。 命令模式 题目: 现在要做一个智能家居控制遥控器,功能如下图所示。 showImg(https://segmentfault.com/img/remote/1460000012774337?w=1730&h=1...

    tomlingtm 评论0 收藏0
  • 优化你的执行队列-组合模式

    摘要:如果把设计模式当做一门语言的话,我觉得组合模式就是里面的数组,或者更确切的说,应该算是一棵树。给向上的绑定向上的执行程序可以看出,使用组合模式命令模式可以完美的打出个两个王的终极炸弹。将同类操作同目的操作放在一组。 如果把设计模式当做一门语言的话,我觉得组合模式就是里面的数组,或者更确切的说,应该算是一棵树。 树的枝干就是其他模式的使用,比如命令模式,代理模式,单例模式等等。总的来说,...

    fish 评论0 收藏0

发表评论

0条评论

BDEEFE

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<