本文源码:GitHub·点这里 || GitEE·点这里

一、生活场景

1、场景描述

智能电脑的品牌越来越多,由此诞生了一款电脑控制的APP,万能遥控器,用户在使用遥控器的时候,可以切换为自家电视的品牌,然后对电视进行控制。

2、代码实现

public class C01_InScene {public static void main(String[] args) {TVClient tvClient = new TVClient() ;Remote remote = new RemoteApp(tvClient) ;UserClient userClient = new UserClient(remote) ;userClient.action("HM","换台");}
}
/*** 遥控接口*/
interface Remote {void controlTV (String tvType,String task);
}
/*** 遥控器APP*/
class RemoteApp implements Remote {private TVClient tvClient = null ;public RemoteApp (TVClient tvClient){this.tvClient = tvClient ;}@Overridepublic void controlTV(String tvType, String task) {tvClient.action(tvType,task);}
}
/*** 用户端*/
class UserClient {// 持有遥控器private Remote remote = null ;public UserClient (Remote remote){this.remote = remote ;}public void action (String tvType, String task){remote.controlTV(tvType,task);}
}
/*** 电视端*/
class TVClient {public void action (String tvType, String task){System.out.println("TV品牌:"+tvType+";执行:"+task);}
}

二、命令模式

1、基础概念

命令模式属于对象的行为模式。命令模式把一个请求或者操作封装到一个对象中。把发出命令的动作和执行命令的动作分割开,委派给不同的对象。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行。

2、模式图解

3、核心角色

  • 命令角色

声明所有具体命令类的抽象接口。

  • 具体命令角色

定义接收者和行为之间的交互方式:实现execute()方法,调用接收者的相应操作 , 传递命令信息。

  • 请求者角色

负责调用命令对象执行请求,相关的方法叫做行动方法。

  • 接收者角色

执行请求。任何一个类都可以成为接收者,执行请求的方法叫做行动方法。

4、源码实现

public class C02_Command {public static void main(String[] args) {Receiver receiver = new Receiver();Command command = new ConcreteCommand(receiver);Invoker invoker = new Invoker(command);invoker.action("卧倒");}
}
/*** 命令角色*/
interface Command {// 执行方法void execute(String task);
}
/*** 具体命令角色类*/
class ConcreteCommand implements Command {//持有相应的接收者对象private Receiver receiver = null;public ConcreteCommand(Receiver receiver){this.receiver = receiver;}@Overridepublic void execute(String task) {//接收方来真正执行请求receiver.action(task);}
}
/*** 请求者角色类*/
class Invoker {// 持有命令对象private Command command = null;public Invoker(Command command){this.command = command;}// 行动方法public void action(String task){command.execute(task);}
}
/*** 接收者角色类*/
class Receiver {// 执行命令操作public void action(String task){System.out.println("执行命令:"+task);}
}

三、Spring框架应用

Spring框架中封装的JdbcTemplate类API使用到了命令模式。

1、JdbcOperations接口

public interface JdbcOperations {@Nullable<T> T execute(StatementCallback<T> var1) ;
}

2、JdbcTemplate类

这里只保留模式方法的代码。

public class JdbcTemplate implements JdbcOperations {@Nullablepublic <T> T execute(StatementCallback<T> action) {try {T result = action.doInStatement(stmt);} catch (SQLException var9) {} finally {}}
}

3、StatementCallback接口

@FunctionalInterface
public interface StatementCallback<T> {@NullableT doInStatement(Statement var1) ;
}

四、命令模式总结

  • 松散的耦合

命令模式使得命令发起者和命令执行者解耦,发起命令的对象完全不知道具体实现对象是谁。这和常见的MQ消息队列原理是类似的。

  • 动态的控制

命令模式把请求封装起来,可以动态地对它进行参数化、队列化和等操作和管理,使系统更加的灵活。

  • 良好的扩展性

命令发起者和命令执行者实现完全解耦,因此扩展添加新命令很容易。

五、源代码地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

Java描述设计模式(20):命令模式相关推荐

  1. java execute 执行成功_【JAVA】设计模式之命令模式(Command模式)的使用分析

    命令模式属于23种设计模式中行为模式中的一个,它也是一种简单实用非常普遍的设计模式. 首先看下GOF对命令模式的定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录 ...

  2. Java描述设计模式(05):原型模式

    一.原型模式简介 1.基础概念 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象. 2.模式结构 原型模式要求对象实现一个 ...

  3. 设计模式 之 命令模式

    2019独角兽企业重金招聘Python工程师标准>>> 设计模式 之 命令模式 命令模式比较简单,不过多赘述 为什么需要命令模式 将"行为请求者"与"行 ...

  4. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  5. 初学Java常用设计模式之——原型模式

    声明:转载请附上原文链接 提示:标题序号从3开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之--工厂模式 序号从2开始. 标题后面之所以加上了解,是因为相对 ...

  6. 23种设计模式之命令模式和策略模式的区别

    文章目录 概述 命令模式 策略模式 相同点 总结 概述 命令模式和策略模式确实很相似,只是命令模式多了一个接收者(Receiver)角色.它们虽然同为行为类模式,但是两者的区别还是很明显的.策略模式的 ...

  7. Java 设计模式之命令模式

    一.了解命令模式 1.1 什么是命令模式 命令模式将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作.这种说法比较难以理解,换种说法 ...

  8. Java描述设计模式(24):备忘录模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 常见的视频播放软件都具备这样一个功能:假设在播放视频西游记,如果这时候切换播放视频红楼梦,当再次切回播放西游记时, ...

  9. JAVA设计模式什么鬼(命令模式)——作者:凸凹里歐

    命令模式,通常指的是一个对象向另一个对象发送信息指令的行为模型,比如父母命令孩子写作业.将军命令士兵进攻等.我们经过分析拆解方法会得到三个模块,首先得有命令发送方,接着是被传递的命令本身,最后就是命令 ...

最新文章

  1. 利用GridView显示主细表并一次编辑明细表所有数据的例子
  2. redis源码之util
  3. 用C++对C++语法格式进行分析
  4. .Net 应用程序体系结构—C#高级编程(第10版)学习笔记5
  5. UVA 1025 A Spy in the Metro DP水题
  6. 【常见笔试面试算法题12续集四】动态规划算法案例分析4 LCS练习题练习题(最长公共子序列的长度)
  7. SiriKit 描述
  8. 一分钟在云端快速创建MySQL数据库实例
  9. 关于为什么10000000可以表示-128
  10. 年仅30岁!腾讯游戏程序员毛星云意外身故。。。
  11. java设置word审阅最终状态_如何使得打开word文件显示最终的修改状态
  12. PNETLAB模拟器汉化使用
  13. VMware虚拟机win10系统桥接模式连不上网
  14. python没学历可以学习么_python没有学历好就业吗_学历低可以学习python吗
  15. python-体质指数BMI计算
  16. 中兴通讯刀片服务器,中兴通讯发布行业首个OLT内置刀片技术白皮书
  17. flutter web h5微信授权与支付
  18. 弱连通和强连通_什么叫:强连通 单向连通 弱连通 不连通
  19. 侦测IE的代理服务器
  20. 大气的家具装柜生产企业网站织梦模板

热门文章

  1. 短程调度 中程调度 长程调度
  2. 计算机网络之网络层:3、IPv4地址
  3. (王道408考研数据结构)第五章树-第三节2:二叉树构造和重建
  4. Windows编程—获取操作系统默认浏览器路径
  5. [NOI2015]寿司晚宴(状压dp)
  6. 【Node.js学习笔记五】npm(Node包管理器)命令行选项
  7. 将 Shiro 作为应用的权限基础 三:基于注解实现的授权认证过程
  8. LSSS线性秘密共享方案详细构造方法与原理解释试读
  9. 用户画像有什么用?怎样用?6个场景案例给你讲明白
  10. 为什么Flink会成为下一代大数据处理框架的标准?