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

网站建设什么软件好品牌运营管理有限公司

网站建设什么软件好,品牌运营管理有限公司,庆阳宁县疫情最新消息今天,学校网站建设及使用档案命令模式(Command Pattern)是一种行为设计模式,它将一个请求封装为一个对象,从而使你可以使用不同的请求、队列或日志来参数化对象。命令模式让你可以在不修改调用对象的情况下将请求排队、记录日志或撤销操作。 核心思想&#x…

命令模式(Command Pattern)是一种行为设计模式,它将一个请求封装为一个对象,从而使你可以使用不同的请求、队列或日志来参数化对象。命令模式让你可以在不修改调用对象的情况下将请求排队、记录日志或撤销操作。

核心思想:

  • 命令对象:将请求和其所有相关的参数封装到一个对象中。
  • 调用者:负责触发命令执行。
  • 接收者:负责执行具体的命令逻辑。
  • 优点:命令模式可以实现命令的撤销、重做、排队执行等功能。

关键组成:

  1. Command 接口:定义了一个执行命令的接口。
  2. 具体命令类:实现了 Command 接口,负责将请求委托给接收者执行。
  3. 接收者:实际执行命令操作的对象。
  4. 调用者:通过命令对象来执行请求,不需要直接调用接收者。

场景示例:家庭自动化系统

假设我们有一个家庭自动化系统,能够通过遥控器控制各种设备,比如灯和音响。我们将通过命令模式封装打开/关闭设备的操作。

代码实现:

1. 创建命令接口 Command

Command 接口定义了所有命令都必须实现的 execute() 方法。

public interface Command {void execute();void undo();  // 增加撤销功能
}
2. 创建接收者类

这些类代表具体的设备,如灯 (Light) 和音响 (Stereo),它们包含打开和关闭的具体操作。

2.1 Light
public class Light {public void on() {System.out.println("The light is on");}public void off() {System.out.println("The light is off");}
}
2.2 Stereo
public class Stereo {public void on() {System.out.println("The stereo is on");}public void off() {System.out.println("The stereo is off");}public void setCD() {System.out.println("CD is set in stereo");}public void setVolume(int volume) {System.out.println("Stereo volume set to " + volume);}
}
3. 创建具体的命令类

每个具体命令类都实现 Command 接口,将请求传递给对应的接收者对象执行。

3.1 LightOnCommand
public class LightOnCommand implements Command {private Light light;public LightOnCommand(Light light) {this.light = light;}@Overridepublic void execute() {light.on();}@Overridepublic void undo() {light.off();}
}
3.2 LightOffCommand
public class LightOffCommand implements Command {private Light light;public LightOffCommand(Light light) {this.light = light;}@Overridepublic void execute() {light.off();}@Overridepublic void undo() {light.on();}
}
3.3 StereoOnCommand
public class StereoOnCommand implements Command {private Stereo stereo;public StereoOnCommand(Stereo stereo) {this.stereo = stereo;}@Overridepublic void execute() {stereo.on();stereo.setCD();stereo.setVolume(10);}@Overridepublic void undo() {stereo.off();}
}
3.4 StereoOffCommand
public class StereoOffCommand implements Command {private Stereo stereo;public StereoOffCommand(Stereo stereo) {this.stereo = stereo;}@Overridepublic void execute() {stereo.off();}@Overridepublic void undo() {stereo.on();stereo.setCD();stereo.setVolume(10);}
}
4. 创建调用者类 RemoteControl

RemoteControl 作为调用者,保存命令对象并执行它们。

public class RemoteControl {private Command[] onCommands;private Command[] offCommands;private Command undoCommand;public RemoteControl() {onCommands = new Command[7];offCommands = new Command[7];Command noCommand = new NoCommand(); // 空命令,避免 null 检查for (int i = 0; i < 7; i++) {onCommands[i] = noCommand;offCommands[i] = noCommand;}undoCommand = noCommand;}public void setCommand(int slot, Command onCommand, Command offCommand) {onCommands[slot] = onCommand;offCommands[slot] = offCommand;}public void onButtonWasPressed(int slot) {onCommands[slot].execute();undoCommand = onCommands[slot];}public void offButtonWasPressed(int slot) {offCommands[slot].execute();undoCommand = offCommands[slot];}public void undoButtonWasPressed() {undoCommand.undo();}
}
5. 创建空命令 NoCommand

空命令模式用于初始化每个命令插槽,防止出现 null 检查。

public class NoCommand implements Command {@Overridepublic void execute() {// 什么也不做}@Overridepublic void undo() {// 什么也不做}
}
6. 测试客户端

客户端测试如何通过命令模式控制设备。

public class RemoteControlTest {public static void main(String[] args) {RemoteControl remoteControl = new RemoteControl();// 创建接收者Light livingRoomLight = new Light();Stereo stereo = new Stereo();// 创建命令对象LightOnCommand lightOn = new LightOnCommand(livingRoomLight);LightOffCommand lightOff = new LightOffCommand(livingRoomLight);StereoOnCommand stereoOn = new StereoOnCommand(stereo);StereoOffCommand stereoOff = new StereoOffCommand(stereo);// 将命令对象设置到遥控器中remoteControl.setCommand(0, lightOn, lightOff);remoteControl.setCommand(1, stereoOn, stereoOff);// 模拟按钮按下System.out.println("Turning on the light...");remoteControl.onButtonWasPressed(0);System.out.println("Turning off the light...");remoteControl.offButtonWasPressed(0);System.out.println("Undoing the last command...");remoteControl.undoButtonWasPressed();System.out.println("Turning on the stereo...");remoteControl.onButtonWasPressed(1);System.out.println("Turning off the stereo...");remoteControl.offButtonWasPressed(1);}
}

输出结果

Turning on the light...
The light is on
Turning off the light...
The light is off
Undoing the last command...
The light is on
Turning on the stereo...
The stereo is on
CD is set in stereo
Stereo volume set to 10
Turning off the stereo...
The stereo is off

代码解释

  1. 命令接口 Command:定义了命令的基本操作,包含 execute()undo() 方法。
  2. 具体命令类:实现了 Command 接口,负责调用接收者执行具体的命令操作。每个命令类负责一个具体的任务,如打开或关闭灯、打开或关闭音响等。
  3. 接收者类:如 LightStereo,这些类包含实际的业务逻辑。
  4. 调用者 RemoteControl:保存和调用命令对象,通过按钮调用 onCommandoffCommand
  5. 空命令 NoCommand:用来初始化按钮插槽,避免空指针异常。

优点

  • 松耦合:调用者和接收者之间通过命令对象解耦,调用者无需关心具体的业务实现。
  • 扩展性:可以轻松添加新的命令类而不影响其他类的代码。
  • 支持撤销和重做:命令模式通过封装命令对象,使得支持撤销和重做功能变得容易。

适用场景

  • 需要参数化对象以执行不同的请求。
  • 需要在不改变调用代码的情况下记录命令、撤销或排队执行命令。
  • 需要将操作封装为对象以便进行传递、记录、或回放。

通过命令模式,可以灵活地对操作进行解耦,适用于复杂系统中对操作的管理。

http://www.dtcms.com/wzjs/338417.html

相关文章:

  • 备案的网站 能拿来做仿站吗头条号权重查询
  • 网站备案不能访问刚刚中国突然宣布
  • 河间市网站建设价格公司网站如何在百度上能搜索到
  • 成都企业网站设计制作seo综合查询工具有什么功能
  • 2015年做哪些网站致富互联网营销主要学什么
  • 贵阳专业做网站公司有哪些代理公司注册
  • 网站建设历程优化推广
  • 如何登陆建设银行信用卡网站游戏推广引流
  • 做公司网站的多少钱百度网盟推广怎么做
  • 中山市企业网站seo营销工具推广软文怎么写
  • 网站设计规范互联网广告是做什么的
  • 铁门关市建设局网站小说排行榜百度搜索风云榜
  • 店面设计原则不包括seo案例
  • 做私人网站网店推广费用多少钱
  • 厦门 网站建设 网站开发大数据营销成功案例
  • wordpress 为知笔记seo外推软件
  • 成都网站建设公司官网营销技巧培训
  • 广州做网站的公司哪家好怎么联系百度推广
  • 如何做网站流量分析报表优化推广网站排名
  • 网站促销广告如何设计网站的首页
  • 国外网购网站网站免费建站app
  • 系统网站怎么做的什么软件可以推广自己的产品
  • 网站域名背景广州市运营推广公司
  • 网站建设高清图片什么是网络推广
  • 怎样自己做刷赞网站网上销售
  • wordpress查询分页网站seo诊断报告怎么写
  • 郑州门户网站建设5年网站seo优化公司
  • 成人本科官网标题优化seo
  • 商城网站jq楼层响应品牌策略有哪些
  • 宁波网站建设哪家强永久免费wap自助建站