目录

一、命令模式

二、实现

三、优缺点

四、适合环境

五、小结


一、命令模式

命令模式:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,请求排队或者记录请求日志,以及支持可撤销的操作(行为型)。

命令模式角色:

  • 抽象命令类:抽象命令类一般是抽象类或者接口,在里面声明了执行请求的方法;
  • 具体命令类:实现了抽象命令类的方法;
  • 调用者:通过命令对象执行请求;
  • 接收者:执行与请求相关的操作。

二、实现

在src目录下,新建一个command文件夹,在该文件夹下新建一个command.cj文件和command.drawio文件。

类图

核心代码

package DesignPattern.command

// 抽象命令类
public abstract class Commamd {
    public func execute(): Unit
}

// 调用者
public class Button {
    public Button(private let command: Commamd) {}

    public func click() {
        print("点击功能键: ")
        this.command.execute()
    }
}

// 接收者
private class Exit {
    public func exit() {
        println("退出系统")
    }
}

private class Help {
    public func help() {
        println("显示帮助文档")
    }
}

// 具体命令类
public class ExitCommand <: Commamd {
    private let exit: Exit

    public init() {
        this.exit = Exit()
    }

    public override func execute() {
        this.exit.exit()
    }
}

public class HelpCommand <: Commamd {
    private let help: Help

    public init() {
        this.help = Help()
    }

    public override func execute() {
        this.help.help()
    }
}

测试代码

package DesignPattern
import DesignPattern.command.*

main(): Int64 {
    var button = Button(HelpCommand())
    button.click()

    button = Button(ExitCommand())
    button.click()


    return 0
}

三、优缺点

优点:

  • 降低系统的耦合度,由于请求者与接收者之间不存在直接引用,因此请求者与接收者完全解耦;
  • 新的命令可以容易地加入到系统中,满足开闭原则。

缺点:

  • 使用命令模式可能会导致某些系统中有过多地具体命令类。

四、适合环境

  • 系统需要将请求者和接收者解耦,使得请求者和接收者互不解耦;
  • 系统需要在不同地时间指定请求、将请求排队和执行请求。

五、小结

本章为大家详细的介绍了仓颉设计模式中命令模式的内容,下一章,为大家带来命令模式练习题的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉设计模式有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐