Java描述设计模式(20):命令模式
本文源码: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):命令模式相关推荐
- java execute 执行成功_【JAVA】设计模式之命令模式(Command模式)的使用分析
命令模式属于23种设计模式中行为模式中的一个,它也是一种简单实用非常普遍的设计模式. 首先看下GOF对命令模式的定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录 ...
- Java描述设计模式(05):原型模式
一.原型模式简介 1.基础概念 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象. 2.模式结构 原型模式要求对象实现一个 ...
- 设计模式 之 命令模式
2019独角兽企业重金招聘Python工程师标准>>> 设计模式 之 命令模式 命令模式比较简单,不过多赘述 为什么需要命令模式 将"行为请求者"与"行 ...
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
- 初学Java常用设计模式之——原型模式
声明:转载请附上原文链接 提示:标题序号从3开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之--工厂模式 序号从2开始. 标题后面之所以加上了解,是因为相对 ...
- 23种设计模式之命令模式和策略模式的区别
文章目录 概述 命令模式 策略模式 相同点 总结 概述 命令模式和策略模式确实很相似,只是命令模式多了一个接收者(Receiver)角色.它们虽然同为行为类模式,但是两者的区别还是很明显的.策略模式的 ...
- Java 设计模式之命令模式
一.了解命令模式 1.1 什么是命令模式 命令模式将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作.这种说法比较难以理解,换种说法 ...
- Java描述设计模式(24):备忘录模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 常见的视频播放软件都具备这样一个功能:假设在播放视频西游记,如果这时候切换播放视频红楼梦,当再次切回播放西游记时, ...
- JAVA设计模式什么鬼(命令模式)——作者:凸凹里歐
命令模式,通常指的是一个对象向另一个对象发送信息指令的行为模型,比如父母命令孩子写作业.将军命令士兵进攻等.我们经过分析拆解方法会得到三个模块,首先得有命令发送方,接着是被传递的命令本身,最后就是命令 ...
最新文章
- 利用GridView显示主细表并一次编辑明细表所有数据的例子
- redis源码之util
- 用C++对C++语法格式进行分析
- .Net 应用程序体系结构—C#高级编程(第10版)学习笔记5
- UVA 1025 A Spy in the Metro DP水题
- 【常见笔试面试算法题12续集四】动态规划算法案例分析4 LCS练习题练习题(最长公共子序列的长度)
- SiriKit 描述
- 一分钟在云端快速创建MySQL数据库实例
- 关于为什么10000000可以表示-128
- 年仅30岁!腾讯游戏程序员毛星云意外身故。。。
- java设置word审阅最终状态_如何使得打开word文件显示最终的修改状态
- PNETLAB模拟器汉化使用
- VMware虚拟机win10系统桥接模式连不上网
- python没学历可以学习么_python没有学历好就业吗_学历低可以学习python吗
- python-体质指数BMI计算
- 中兴通讯刀片服务器,中兴通讯发布行业首个OLT内置刀片技术白皮书
- flutter web h5微信授权与支付
- 弱连通和强连通_什么叫:强连通 单向连通 弱连通 不连通
- 侦测IE的代理服务器
- 大气的家具装柜生产企业网站织梦模板