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

apache如何搭建多个网站域名手机网站源码

apache如何搭建多个网站,域名手机网站源码,多多搜索推广,最美logo图案大全概述命令模式 : 一种行为型模式,将命令的发出与命令的执行进行解耦。 从而使代码达到灵活的状态。角色Command 命令接口 : 命令的接口,通常有一个 execute() 方法,表示执行操作。ConcreteCommand 命令实现类 : 命令接口的具体实现…

概述

命令模式 : 一种行为型模式,将命令的发出命令的执行进行解耦。
从而使代码达到灵活的状态。

角色

Command 命令接口 : 命令的接口,通常有一个 execute() 方法,表示执行操作。

ConcreteCommand 命令实现类 : 命令接口的具体实现类。

  • 有一个Receiver 对象的引用,执行具体的命令对应的逻辑。

Invoker 请求者 : 发出命令的请求者。

  • 有一个 Command 对象的引用

Receiver 接收者 : 命令的具体执行者,具体的逻辑。

举个例子 :用遥控器开关灯的场景

  • 开灯/关灯 : 这是一个具体的命令;
  • : 命令的接收者,具体执行 开灯动作 or 关灯动作;
  • 遥控器 :命令的请求者,发出具体的 开灯命令 or 关灯命令。

类图设计

在这里插入图片描述

代码实现

接收者-灯

public class Light {public void on() {System.out.println("Light is on");}public void off() {System.out.println("Light is off");}
}

命令接口 & 命令实现

public interface ICommand {void execute();void undo();
}
/**
* 开灯具体命令
*/
public class LightOnCommand implements ICommand{private Light light;public LightOnCommand(Light light) {this.light = light;}@Overridepublic void execute() {System.out.println("开灯命令 execute begin ");light.on();System.out.println("开灯命令 execute end ");}@Overridepublic void undo() {System.out.println("开灯命令 undo begin ");light.off();System.out.println("开灯命令 undo end ");}
}
/*** 关灯的具体命令*/
public class LightOffCommand implements ICommand{private Light light;public LightOffCommand(Light light){this.light = light;}@Overridepublic void execute() {System.out.println("关灯命令 execute begin ");light.off();System.out.println("关灯命令 execute end ");}@Overridepublic void undo() {System.out.println("关灯命令 undo begin ");light.on();System.out.println("关灯命令 undo end ");}
}

调用者-遥控器

public class RemoteControl {/*** 命令列表 : 可以存放多个命令*/private Map<String,ICommand> commandMap;public RemoteControl(Map<String,ICommand> commandMap){this.commandMap = commandMap;}// 设置命令public void setCommand(String name,ICommand command){commandMap.put(name, command);}// 执行命令public void execute(String name){ICommand command = commandMap.get(name);command.execute();}// 撤销命令public void undo(String name){ICommand command = commandMap.get(name);command.undo();}
}

测试使用


public class CommandPatternTest {public static void main(String[] args) {// 创建灯对象Light light = new Light();// 创建开灯命令对象ICommand lightOnCommand = new LightOnCommand(light);// 创建关灯命令对象ICommand lightOffCommand = new LightOffCommand(light);// 创建遥控器对象RemoteControl remoteControl = new RemoteControl(new HashMap<>());remoteControl.setCommand("lightOn", lightOnCommand);remoteControl.setCommand("lightOff", lightOffCommand);// 遥控器执行开灯命令remoteControl.execute("lightOn");System.out.println("--------------------------------------------------");// 遥控器执行撤销动作remoteControl.undo("lightOn");System.out.println("--------------------------------------------------");// 遥控器执行关灯命令remoteControl.execute("lightOff");System.out.println("--------------------------------------------------");// 遥控器执行撤销动作remoteControl.undo("lightOff");}
}
运行结果:每个命令都支持 执行 与 撤销 
开灯命令 execute begin 
Light is on
开灯命令 execute end 
--------------------------------------------------
开灯命令 undo begin 
Light is off
开灯命令 undo end 
--------------------------------------------------
关灯命令 execute begin 
Light is off
关灯命令 execute end 
--------------------------------------------------
关灯命令 undo begin 
Light is on
关灯命令 undo end 

优点

解耦 (Decoupling): 这是最主要的优点。调用者(Invoker)和接收者(Receiver)之间完全解耦。调用者不需要知道请求的具体细节,只需要知道命令接口。这使得系统组件可以独立变化和复用。

可扩展性 (Extensibility): 添加新的命令非常容易,只需要实现 Command 接口并创建一个新的 ConcreteCommand 类,而无需修改现有的 Invoker 或 Client 代码(符合开闭原则)。

支持撤销/重做 (Undo/Redo): 通过在 Command 接口中定义 undo() 方法,并在 ConcreteCommand 中实现相应的撤销逻辑,可以轻松地实现撤销和重做功能。Invoker 可以维护一个命令历史列表。

支持宏命令 (Macro Command): 可以创建一个 MacroCommand 类,它本身也是一个 Command,但内部包含一个 Command 对象列表。执行 MacroCommand 的 execute() 会遍历并执行其内部的所有命令。撤销操作则按逆序执行每个命令的 undo()。

支持请求队列 (Request Queuing): 可以将命令对象放入队列中,在不同的线程中异步执行,或者延迟执行。因为命令对象包含了所有执行所需的信息。

日志请求 (Logging Requests): 命令对象可以很容易地被序列化,从而可以将请求记录到日志文件中,用于系统崩溃后的恢复(事务型命令)。

缺点

类膨胀 (Class Proliferation): 每个不同的请求都需要一个具体的 ConcreteCommand 类,这可能会导致系统中类的数量急剧增加。

增加复杂性 (Increased Complexity): 对于简单的操作,引入命令模式可能显得过于复杂和笨重。

适用场景(了解)

【实现撤销/重做功能】: 如文本编辑器、图形编辑器。
【实现宏命令】: 用户可以录制一系列操作,然后一次性执行。
【构建基于命令的系统】: 如任务调度系统、工作流引擎。
【请求需要排队、记录日志或远程执行】: 命令对象可以轻松地在网络上传输、存储或放入队列。
【参数化对象】: 需要将操作参数化,例如 GUI 中的按钮、菜单项,它们的行为由关联的命令决定。
【高阶操作】: 需要在不同的时间点执行请求,或者需要将操作对象作为参数传递。
http://www.dtcms.com/a/559431.html

相关文章:

  • 青岛做网站建公司网站能给企业带来什么
  • 山西住房与城乡建设厅定额网站重庆家政网站建设
  • wordpress站点一百数据卡不怎么注册自己的网站
  • 南充免费推广网站网站建设分金手指专业
  • 哪里有做网站推广的系统优化大师
  • 免费自助建站网站一览自助建站平台谷歌广告优化
  • 模板网站定制网站建设门户网站需要注意什么意思
  • 网站建设那些公司比较好学院网站建设自查报告
  • 域名访问网站啥意思游戏币交易平台代理
  • 网站建设伍金手指下拉8可以做外链的图片网站
  • 网站维护工程师浙江建设工程信息网查询
  • 直播网站开发源码wordpress远程图片模块
  • 永清建设局网站网站开发的论文参考文献
  • 网站备案 更名学电商需要多少钱
  • 网站建设具体需求浙江省建设厅网站查询
  • 什么叫网站集约化建设网站如何吸引用户
  • 音乐网站开发与需求十大软件app排行榜下载
  • 网络网站如何推广网络营销推广方案策划书
  • 仿70网站分类目录源码招聘网站建设人员要求
  • 循环队列(不扩容)
  • 大连网站建设公司哪家好网站和网络有什么区别
  • plc学习路线
  • 网站页脚内容工具型网站
  • 网站制作费用多少wordpress mu 搜索
  • 建设网站的五个步骤个人网站主页建设教程
  • 行业平台网站建设一台服务器一个固定ip怎样做两个网站
  • 温州网站设计工作室优化推广网站淄博
  • 电子商务网站后台seo引擎搜索网站关键词
  • 酒店要做关于网站ppt怎么做保定网站建
  • 网站开发 外包空心wordpress识别手机跳转网站