首页 > 其他分享 >设计模式—命令模式

设计模式—命令模式

时间:2023-07-25 13:00:14浏览次数:27  
标签:void 模式 命令 IReceiver receiver 设计模式 public

命令模式

目录

命令模式是一个高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式

角色组成:抽象命令角色,具体命令角色,调用者角色,抽象接受者角色,具体接收者角色,客户端。

命令模式与策略模式的差异:

命令模式比策略模式多了一个接收者角色。

命令模式主要针对一串操作,而策略模式针对的是单个操作。可以理解命令模式是策略模式的多层级升级版本。

例子

  • 抽象命令类
package org.kouhao.design.patterns.命令模式;

/**
 * @author admin
 */
public abstract class AbstractCommand {
    IReceiver receiver;

    public AbstractCommand(IReceiver receiver) {
        this.receiver = receiver;
    }

    abstract void execute();
}

  • 接收者接口
package org.kouhao.design.patterns.命令模式;

/**
 * 接受者角色
 *
 * @author admin
 */
public interface IReceiver {
    void action();
}
  • 具体命令类1
package org.kouhao.design.patterns.命令模式;

/**
 * 增加需求命令
 *
 * @author admin
 */
public class AddRequirementCommand extends AbstractCommand {
    public AddRequirementCommand(IReceiver receiver) {
        super(receiver);
    }

    @Override
    void execute() {
        this.receiver.action();
    }
}
  • 具体命令类2
package org.kouhao.design.patterns.命令模式;

/**
 * 删除页面命令
 *
 * @author admin
 */
public class DeletePageCommand extends AbstractCommand {
    private IReceiver receiver;

    public DeletePageCommand(IReceiver receiver) {
        super(receiver);
    }

    @Override
    public void execute() {
        receiver.action();
    }
}
  • 接收者实现类1
package org.kouhao.design.patterns.命令模式;

/**
 * @author admin
 */
public class AddRequirementReceiver implements IReceiver {
    @Override
    public void action() {
        System.out.println("AddRequirementReceiver is doing.");
    }
}
  • 接收者实现类2
package org.kouhao.design.patterns.命令模式;

/**
 * @author admin
 */
public class DeletePageReceiver implements IReceiver{
    @Override
    public void action() {
        System.out.println("DeletePageReceiver is doing.");
    }
}
  • 调用者类
package org.kouhao.design.patterns.命令模式;

/**
 * @author admin
 */
public class Invoker {
    private AbstractCommand command;

    public void setCommand(AbstractCommand command) {
        this.command = command;
    }

    public void action() {
        this.command.execute();
    }
}
  • 客户端
package org.kouhao.design.patterns.命令模式;

/**
 * @author admin
 */
public class Client {
    public static void main(String[] args) {
        //首先声明调用者Invoker
        Invoker invoker = new Invoker();
        //定义接收者
        IReceiver receiver = new AddRequirementReceiver();
        //定义一个发送给接收者的命令
        AbstractCommand command = new AddRequirementCommand(receiver);
        //把命令交给调用者去执行
        invoker.setCommand(command);
        invoker.action();
    }
}
  • 输出

AddRequirementReceiver is doing.

标签:void,模式,命令,IReceiver,receiver,设计模式,public
From: https://www.cnblogs.com/kouhao/p/17579619.html

相关文章

  • 设计模式—解释器模式
    解释器模式解释器模式(InterpreterPattern)是一种按照规定语法进行解析的方案,在现在项目中使用较少,其定义如下:Givenalanguage,definearepresentationforitsgrammaralongwithaninterpreterthatusestherepresentationtointerpretsentencesinthelanguage。优......
  • 设计模式—门面模式
    门面模式门面模式(FacadePattern)也叫做外观模式,是一种比较常用的封装模式。要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。优点减少系统的相互依赖;提高了灵活性;提高安全性。缺点是不符合......
  • 设计模式—原型模式
    原型模式原型模式(PrototypePattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。优点原型模式是在内存二进制流的拷贝,要比直接new一个对象性......
  • 设计模式—工厂模式
    目录简单工厂模式类图案例分析工厂方法模式优点类图案例分析抽象工厂模式优点缺点使用场景注意事项类图案例分析工厂模式分为简单工厂模式,工厂方法模式,抽象工厂模式。简单工厂模式简单工厂模式的核心是定义一个创建对象的接口,将对象的创建和本身的业务逻辑分离,降低系统的耦合度......
  • OSql命令操作函数(可用于安装程序的时候数据库脚本执行)
    ///<summary>///OSql命令操作函数(可用于安装程序的时候数据库脚本执行)///</summary>publicclassSqlScriptHelper{#regionOSql操作函数///<summary>///本地执行SQL脚本///</summary>///<paramname=......
  • vs c#判断程序是否调试模式,开发模式,发布模式,Debug模式,Release模式
    转发自:https://blog.csdn.net/qq_37664403/article/details/1187471951.Debug模式,Release模式#ifDEBUGConsole.WriteLine(“Debug模式”);#elseConsole.WriteLine(“Release模式”);#endif此方法适合习惯好的程序员,但是对我来说不怎么习惯使用,因为调试个代码,和不在调试情况下运......
  • Java开发笔记之mac的intellij idea在debug模式下卡住的问题
    0x00问题描述mac的Intellijidea在debug模式下放行时,程序会卡住无响应;即使在已经放行的情况下,后续代码也不运行,console内只显示Theapplicationisrunning或者等了很久程序才开始后续的运行。 0x01解决方案修改host中的配置。通过以下命令,打开hosts的编辑页面。sudovi......
  • 一分钟学一个 Linux 命令 - rm
    前言大家好,我是god23bin,欢迎回到咱们的《一分钟学一个Linux命令》系列,今天我要讲的是一个比较危险的命令,rm命令,没错,你可以没听过rm命令,但是删库跑路你不可能没听过吧?什么?没听过,没事,现在你就听过了,我刚刚已经讲了,哈哈哈。好了,废话不多说,现在开始吧!什么是rm?rm是单词rem......
  • Jmeter(二十二)jmeter命令行的执行方式以及常用参数
    jmeter命令-n-t:-n  表示使用非GUI的方式运行;-t  表示指定jmeter的测试脚本; -l :-l  表示生成指定的报告文件,一般使用jtl格式来保存,因为jtl文件可以使用jmeter任意监听器打开;jmeter.save.saveservice.output_format=xmljmeter.save.saveservice.response_da......
  • 非关语言: 设计模式
    http://www.riabook.cn/doc/designpattern/非关语言:设计模式程式设计是思维具体化的一种方式,是思考如何解决问题的过程,设计模式是在解决问题的过程中,一些良好思路的经验集成,最早讲设计模式,人们总会提到Gof 的著作,它最早将经典的23种模式集合在一起说明,对后期学习程式设计,尤......