论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
说说设计模式~命令模式(command)
说说设计模式~命令模式(command)
惊落一身雪
论坛元老
|
2023-6-28 14:51:45
|
显示全部楼层
|
阅读模式
楼主
主题
1854
|
帖子
1854
|
积分
5562
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回到目录
概述
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而允许我们根据不同的请求将客户端参数化,并且能够将请求排队或记录请求日志、支持撤销操作等。该模式使得请求的发送者和接收者解耦。
使用命令模式的主要目的是将方法调用封装成对象,这样可以在不同的上下文中使用不同的请求、队列或日志来参数化其他对象。这使得请求的发送者和接收者之间的耦合度降低,并且能够灵活地扩展和变化请求的处理。
包含的对象
命令模式的主要参与者包括:
Command(命令):声明执行操作的接口,通常包含执行方法 execute()。
ConcreteCommand(具体命令):实现 Command 接口,将一个接收者对象绑定于一个动作,并实现执行方法。
Receiver(接收者):执行命令的相关操作,是具体业务逻辑的实际执行者。
Invoker(调用者):发出具体命令并要求命令执行请求的对象。
Client(客户端):创建具体命令对象并设置其接收者。
在代码中的体现
以下是一个使用命令模式的简单示例,以控制电灯的开关操作为例:
定义命令接口和具体命令类:
// Command(命令)
public interface Command {
void execute();
}
// ConcreteCommand(具体命令)
public class LightOnCommand implements Command {
private Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.turnOn();
}
}
复制代码
定义接收者类:
// Receiver(接收者)
public class Light {
public void turnOn() {
System.out.println("Light turned on");
}
public void turnOff() {
System.out.println("Light turned off");
}
}
复制代码
定义调用者类:
// Invoker(调用者)
public class RemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
复制代码
客户端代码示例:
// Client(客户端)
public class Main {
public static void main(String[] args) {
// 创建接收者对象
Light light = new Light();
// 创建具体命令对象并设置接收者
Command lightOnCommand = new LightOnCommand(light);
// 创建调用者对象并设置命令
RemoteControl remoteControl = new RemoteControl();
remoteControl.setCommand(lightOnCommand);
// 执行命令
remoteControl.pressButton();
}
}
复制代码
在上述示例中,命令模式的主要参与者包括 Command 接口和 LightOnCommand 具体命令类。Light
类作为接收者执行实际的命令操作。RemoteControl 类作为调用者负责接收命令并执行。客户端代码创建接收者对象、具体命令对象和调用者对象,并将它们组合在一起进行命令的执行。
通过命令模式,我们可以将控制电灯开关的操作封装成一个命令对象,使得命令的发送者和接收者解耦,且能够动态地设置命令并执行。这样的设计可以方便地扩展和修改命令的处理逻辑,以及支持命令的撤销和重做操作等。
回到目录
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
惊落一身雪
论坛元老
这个人很懒什么都没写!
楼主热帖
看完这个,还不会DVMA,请你吃瓜 ...
腾讯叶聪:朋友圈爆款背后的计算机视觉 ...
聊一聊 TLS/SSL
数据湖选型指南|Hudi vs Iceberg 数据 ...
人工智能对软件测试的影响
图文结合带你搞懂InnoDB MVCC
rust中的超时处理
处理接口幂等性的两种常见方案 ...
一个故事看懂CPU的SIMD技术
Kubernetes(k8s)CNI(flannel)网络 ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
人工智能
快速回复
返回顶部
返回列表