当前位置: 首页 > news >正文

设计模式命令

命令模式


设计原则:遵循迪米特、开闭原则
常用场景:行为的请求者与行为的处理者耦合度过高
使用概率:20%
复杂度:中高
变化点:命令的种类
选择关键点:请求者是否不需要关心命令的执行只知道接受者
逆鳞:命令的种类无限制增长
相关设计模式
职责链模式:容易将二者关联在一起的原因是,二者都是为了处理请求或者命令而存在的,而且二者都是为了将请求者与响应者解耦,
不同的是命令模式中,客户端需要知道一个命令的接受者,在创建命令的时候就把接受者与命令绑定在一起发送给调用者,
而职责链模式中,客户端并不关心最终处理请求的对象是谁,客户端只是封装一个请求对象,随后交给职责链的头部而已,也正因为这样,二者的实现方式,有着很大的区别



主要思想:
代码就是让指定类去调用另一个类的指定方法
相当于老板告诉秘书叫某个人过来,秘书就告诉某人 老板就你你过来下
老板就是命令发出者,秘书就是调用者,某人就是命令接收者,这里老板就告诉了秘书接受者和命令



//员工接收者
public class Employee {

    public void execute(){
        System.out.println("接收命令并执行");
    }
}

//秘书调度者  这里的命令可以多种,接收者也可以多种
public class Secretary {

    private Employee employee;

    public Secretary(Employee employee) {
        this.employee=employee;
    }

    public void execute(){
        this.employee.execute();
    }
}


//老板 命令发出着  也可以发各种命令
public class Boss {
    private Secretary secretary;

    public Boss(Secretary secretary) {
        this.secretary = secretary;
    }

    public void sendCommand() {
        this.secretary.execute();
    }
}



public class Test {
    public static void main(String[] args) {
        Employee employee=new Employee();
        Secretary secretary=new Secretary(employee);
        Boss boss=new Boss(secretary);
        boss.sendCommand();
    }
}

 

转载于:https://www.cnblogs.com/zhaojj/p/7798424.html

相关文章:

  • 垃圾回收机制及析构器原理解析
  • 基于Maven管理的JavaWeb项目目录结构参考
  • Excel Interactive View - 让页面表格的功能更强大
  • Nginx 错误集合
  • perl模块Net::SCP::Expect批量下发文件
  • Exchange部署与管理体系结构
  • 傲游云浏览器测评
  • 《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.15. MPFR-3.1.2...
  • 506554897automation正文 Ansible 四(ansible命令参数)
  • 使用exp导出报错EXP-00091
  • 职场上不能惹的八种人!
  • linux 下查看硬件信息(mac,IP地址,硬盘型号,序列号等)
  • ghost错误代码大全
  • Android应用程序组件Content Provider应用实例(1)
  • 尝试N种低格工具失败,采用MP Tool量产工具完成U盘修复
  • learning koa2.x
  • React的组件模式
  • 动态魔术使用DBMS_SQL
  • 和 || 运算
  • 简析gRPC client 连接管理
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 面试总结JavaScript篇
  • 前嗅ForeSpider教程:创建模板
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 强力优化Rancher k8s中国区的使用体验
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用API自动生成工具优化前端工作流
  • 数据可视化之 Sankey 桑基图的实现
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 用Python写一份独特的元宵节祝福
  • 正则学习笔记
  • MyCAT水平分库
  • 仓管云——企业云erp功能有哪些?
  • ​人工智能书单(数学基础篇)
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #define用法
  • #laravel 通过手动安装依赖PHPExcel#
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C语言)字符分类函数
  • (二)JAVA使用POI操作excel
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • ***原理与防范
  • .NET 4.0中的泛型协变和反变
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .Net 中Partitioner static与dynamic的性能对比
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)