Kotlin~Command模式

news2024/9/25 23:22:01

概念

把请求转化为独立的对象

角色介绍

  • Command: 命令接口
  • ConcreteCommand: 具体命令实现类

UML

命令模式

代码实现

interface Command {
    fun execute(vararg arg: String):Int
}
class Print : Command {
    override fun execute(vararg arg: String): Int {
        println("Print:${arg.toList()}")
        return 1
    }
}
class None : Command {
    override fun execute(vararg arg: String): Int {
        println("None:${arg.toList()}")
        return 1
    }
}
class CommandProcessor {
    fun handle(className: String, vararg arg: String): Int? {
        try {
            val pkg = this.javaClass.`package`?.name
            val command: Command = Class.forName("$pkg.$className").newInstance() as Command
            return command.execute(*arg)
        } catch (e: Exception) {
            println("未知命令")
            e.printStackTrace()
        }
        return null
    }
}

fun main() {
    val cp = CommandProcessor()
    cp.handle("None", "12")
    cp.handle("Print", "12", "123")
    cp.handle("", "12", "123")
}

输出

None:[12]
Print:[12, 123]
未知命令
java.lang.ClassNotFoundException: com.dp.command.
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at com.dp.command.CommandProcessor.handle(CommandProcessor.kt:7)
at com.dp.command.CommandProcessorKt.main(CommandProcessor.kt:21)
at com.dp.command.CommandProcessorKt.main(CommandProcessor.kt)

优缺点

优点

  • 动作封装
  • 解偶发送者和接收者
  • 可扩展性
  • 简化和集中错误处理
  • 支持撤销和重做功能,可与备忘录结合实现命令的撤销与恢复
  • 易于实现宏命令和组合命令

缺点

  • 复杂度增加
  • 性能开销

应用场景

  • 文本编辑器
  • 图新编辑器
  • 不同进程间交互

总结

命令模式的结果就是接收方的执行结果,但为了以命令的形式设计,引入额外类型增加理解上的困难。不过这也是设计模式的通病,抽象必然会增加额外的类,代码抽离肯定会比聚合更加难理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第十二天 | 二叉树系列3

二叉树系列3 二叉树 看到二叉树就想到递归404 左叶子之和重点代码随想录的代码我的代码(当日晚上自己理解后写) 513 找树左下角的值重点代码随想录的代码我的代码(当日晚上自己理解后写) 112 路径总和未看讲解,自己编写的青春稚嫩版重点代码随想录的代码我的代码(当…

加解密简单了解之DH密钥协商与AES128

加解密简单了解 1、对称加密与非对称加密 对称加密概念:加密算法是公开的,靠的是秘钥来加密数据,使用一个秘钥加密,必须使用相同的秘钥才解密。 优点: 算法公开、计算量小、加密速度快、加密效率高 缺点:…

通信算法之171: LTE 不同带宽参数

转载&#xff1a; LTE不同带宽配置下的对应的采样率&#xff1a; < Sampling Time > 20 Mhz BW Case : Ts 1 sec / 30.72 Mhz 1s/30,720,000 Hz 0.0326 us 32.6 ns 15 Mhz BW Case : T15 sec / 23.04 Mhz 1s/23,040,000 Hz 0.0434 us 43.4 ns 10 Mhz BW Case :…

【数据结构二叉树OJ系列】2、单值二叉树

目录 题述&#xff08;力扣难度&#xff1a;简单&#xff09;&#xff1a; 思路&#xff1a; 正确的代码&#xff1a; 题述&#xff08;力扣难度&#xff1a;简单&#xff09;&#xff1a; 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。只有…

macOS Sonoma 14beta 3(23A5286g)发布(附黑/白苹果镜像地址)

系统镜像下载&#xff1a;百度&#xff1a;黑果魏叔 系统介绍 黑果魏叔 7 月 6 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta 3 更新&#xff08;内部版本号&#xff1a;23A5286g&#xff09;&#xff0c;本次更新距离上次发布隔了 14 天。 小…

进程通信 软中断 signal()解读

目录 进程通信概述 软中断通信 signal() 概述 signal()类似的函数 signal()之SIGINT signal()之SIGTERM signal()之SIGALRM signal()之SIGQUIT SIG_IGN使用 进程通信概述 进程通信是指进程之间的信息交换。 通信的主要方式 在操作系统中&#xff0c;进程之间需要…

EtherCAT转TCP/IP网关ethercat最大通讯距离

天啊&#xff01;你们听说了吗&#xff1f;数据互联互通问题终于迎来了突破性进展&#xff01;作为生产管理系统的关键部分&#xff0c;数据互联互通一直是个大问题。然而&#xff0c;ETHERCAT和TCP/IP是两个不同的协议&#xff0c;它们之间的通讯一直是个大 问题。但是&#x…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(十)

今天开始使用 vue3 ts 搭建一个项目管理的后台&#xff0c;因为文章会将项目的每一个地方代码的书写都会讲解到&#xff0c;所以本项目会分成好几篇文章进行讲解&#xff0c;我会在最后一篇文章中会将项目代码开源到我的GithHub上&#xff0c;大家可以自行去进行下载运行&…

【Linux之拿捏信号1】什么是信号以及信号的产生

文章目录 生活角度的信号技术应用角度的信号系统中的信号信号函数signal调用系统函数向进程发信号由软件条件产生信号由硬件异常产生信号总结 生活角度的信号 在我们的生活中&#xff0c;什么可以被称为信号呢&#xff1f; 那可太多啦&#xff0c;有红绿灯&#xff0c;闹钟&…

通过NFS与Windows共享文件

通过NFS与Windows共享文件 1. 连接同一wifi网络 将开发板子连接至和PC同网络&#xff0c;并保证能互相ping通 2.启动Windows 端NFS Server 在电脑端启动NFS server&#xff08;下载链接&#xff1a; https://www.hanewin.net/nfs-e.htm &#xff09; 3. 双击nfssrv-64.exe…

轻创数字人集团一文论述如何助力中小型企业数字化转型 ?

随着互联网技术的不断发展&#xff0c;人工智能已经成为了许多企业数字化转型的重要工具。然而&#xff0c;在人工智能领域中&#xff0c;不乏一些大型公司在研发和应用方面占据着主导地位。例如&#xff0c;以基础技术和软硬件设施为主的上游层&#xff0c;以英伟达、Meta、Ep…

基于 DDR3 的native接口串口传图帧缓存系统设计实现(整体设计)

文章目录 前言一、串口传图顶层系统设计框图二、各模块说明三、uart_ddr3_native_tft四、 uart_ddr3_native_tft仿真模块五、fifo_ddr3_native_fifo 模块六、fifo_ddr3_native_fifo 仿真模块七、传图展示 前言 结合串口接收模块和 tft 显示屏控制模块&#xff0c;设计一个基于…

sklearn房价预测(随机森林)

文章目录 一、前言二、实现方法一、前言 任务目标:根据统计在csv中的房屋属性相关数据,预测房屋最终成交价格数据集:《住宅属性数据集》,自取https://download.csdn.net/download/weixin_43721000/87785277数据集字段解释: 这个文件中有字段详细说明↓ 二、实现方法 # pi…

ARM_key1按键按下,打印key1

include/key.h #ifndef __KEY_H__ #define __KEY_H__#include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h"//对RCC/GPIO/EXTI进行初始化 void hal_key1_exit_init()…

路径规划算法:基于类电磁机制优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于类电磁机制优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于类电磁机制优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能…

面试交流会

面试交流 目录&#xff1a; 01&#xff1a;关于人生目标 02&#xff1a;关于心态 03&#xff1a;关于选择 04&#xff1a;关于学习 05&#xff1a;关于简历 06&#xff1a;关于找工作 1&#xff1a;关于人生目标 1.01、自己想成为什么样的人&#xff1f; 1.02、自己的人生目标是…

sqoop 详解

1 sqoop原理 1.1 sqoop介绍# Sqoop是Apache旗下的一款“hadoop和关系型数据库服务器之间传送数据”的工具。   导入数据&#xff1a;MySQL、Oracle导入数据到hadoop的hdfs、hive、hbase等数据存储系统。   导出数据&#xff1a;从hadoop的文件系统中导出数据到关系型数据…

Mysql数据库——表操作的练习

题目一 &#xff08;1&#xff09; mysql> create database Market; &#xff08;2&#xff09; mysql> use Market; Database changed mysql> create table customers(->c_num INT(11) primary key auto_increment,->c_name varchar(50),->c_contact varcha…

chatGPT之100个例子-从体验到精通

简介 本博文演示了100个chatGPT在各行各业的使用例子,全部看完有助于培养chatGPT解决问题的思维。 在人工智能时代,智能软件并不会淘汰人类,淘汰人类的是会使用人工智能的人! 我们直接使用openAI官方chatGPT,生动演示了chatGPT的一些妙用! 请仔细看完,一定会有收获! 每…

Python 之 基本概述

这里写目录标题 一、Python 简介1. 历史背景2. 特点3. 优缺点4. 应用领域 二、Python 解释器1. 解释器是什么&#xff1f;2. 解释器的构成及其各部分功能3. 解释器的执行过程 三、Python 环境安装四、第一个 Python 程序1. 实际操作2. 常见问题 五、Python 开发环境 一、Python…