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

网站建设哪家便宜成都网站优化公司

网站建设哪家便宜,成都网站优化公司,网络营销网站建设设计方案,抚顺做网站命令模式 问题背景命令模式基本介绍UML类图 解决方案UML类图代码示例 问题背景 1)随着现在科技越来越先进,我们在家庭中对物品的开关都不需要亲自走过去来进行了。我们只需要通过手机APP中的按键来远程执行这个命令。 2)其实这就是命令模式&…

命令模式

  • 问题背景
  • 命令模式
    • 基本介绍
    • UML类图
  • 解决方案
    • UML类图
    • 代码示例

问题背景

1)随着现在科技越来越先进,我们在家庭中对物品的开关都不需要亲自走过去来进行了。我们只需要通过手机APP中的按键来远程执行这个命令。
2)其实这就是命令模式,使用者完全不需要懂这个命令如何执行,谁来执行,使用者只需要发送命令即可。
3)命令模式可将“动作的请求者”从“动作的执行者对象中解耦出来
在这里插入图片描述

命令模式

基本介绍

1)命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道彼请求的操作是哪个
我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计
2)命名模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。
3)在命令模式中,会将一个请求封装为一个对象,以便使用不同参数来表示不同的请求(即命名),同时命令模式也支持可撤销的操作。
4)通俗易懂的理解,将军发布命令,士兵去执行。其中有几个角色,将军(命令发布者)、士兵 (命令的具体执行者) 、命令(连接将军和士兵)。
Invoker是调用者 (将军),Receiver是被调用者 (士兵),MyCommand是命令,实现了Command接口,持有接收对象
5)命令的发送者完全不需知道谁来执行,只需要发送

UML类图

在这里插入图片描述
1)Invoker是调用者角色
2)Command是命令调用者,需要执行所有命令都在这里,可以是接口或者抽象类
3)Receiver是接收者,具体执行命令的角色
4)ConcreteCommand将一个接收者对象与一个动作绑定,调用接收者相应的操作
5)不理解可结合实际问题解决得UML类图来理解

解决方案

UML类图

在这里插入图片描述
1)原始物品LightReceiver有开关方法
2)继承Command接口创建等得开关命令,开灯命令撤回方法就是关灯,关灯方法撤回方法就是开灯
3)创建一个RemoteController来保存这些命令,调用得时候直接调用RemoteController类即可
4)NoCommand是一个空命令,可以简化我们的判空操作
5)RemoteController类中有两个属性,map用来保存命令,stack用来记录执行的命令

代码示例

/*** 灯* * @author wenqiang* @date 2023/6/1*/
public class LightReceiver {public void on() {System.out.println("开灯");}public void off() {System.out.println("关灯");}
}
/*** 命令接口* * @author wenqiang* @date 2023/6/1*/
public interface Command {/*** 执行命令*/void execute();/*** 撤回命令*/void undo();
}
/*** 开灯命令** @author wenqiang* @date 2023/6/1*/
public class LightOnCommand implements Command {private LightReceiver lightReceiver = new LightReceiver();@Overridepublic void execute() {lightReceiver.on();}@Overridepublic void undo() {lightReceiver.off();}
}
/*** 关灯命令** @author wenqiang* @date 2023/6/1*/
public class LightOffCommand implements Command {private LightReceiver lightReceiver = new LightReceiver();@Overridepublic void execute() {lightReceiver.off();}@Overridepublic void undo() {lightReceiver.on();}
}
/*** 空命令** @author wenqiang* @date 2023/6/1*/
public class NoCommand implements Command {@Overridepublic void execute() {System.out.println("空命令");}@Overridepublic void undo() {System.out.println("空命令");}
}
/*** 控制界面** @author wenqiang* @date 2023/6/1*/
public class RemoteController {/*** 用来保存命令的设置信息*/private Map<String, Command> map = new HashMap<>(8);/*** 用来保存执行的命令 【使用栈】 【用于命令撤回】*/private Stack<Command> stack = new Stack<>();/*** 设置命令** @param name* @param command*/public void setCommond(String name, Command command) {map.put(name, command);}/*** 开** @param name*/public void on(String name) {Command command = map.getOrDefault(name, new NoCommand());command.execute();stack.push(command);}/*** 关** @param name*/public void off(String name) {Command command = map.getOrDefault(name, new NoCommand());command.execute();stack.push(command);}/*** 撤回**/public void undo() {if (stack.isEmpty()) {new NoCommand().undo();return;}Command pop = stack.pop();pop.undo();}
}

我们来设置命令并使用他们

public class Client {public static void main(String[] args) {// 创建一个控制界面RemoteController remoteController = new RemoteController();// 设置命令remoteController.setCommond("灯-开", new LightOnCommand());remoteController.setCommond("灯-关", new LightOffCommand());// 执行命令remoteController.on("灯-开");// 回撤命令remoteController.undo();remoteController.undo();}
}

执行结果

在这里插入图片描述

我们来增加一种设备,加入到控制界面

/*** 电视* * @author wenqiang* @date 2023/6/1*/
public class TelevisionReceiver {public void on() {System.out.println("打开电视");}public void off() {System.out.println("关闭电视");}
}
/*** 打开电视命令** @author wenqiang* @date 2023/6/1*/
public class TelevisionOnCommand implements Command {private TelevisionReceiver televisionReceiver = new TelevisionReceiver();@Overridepublic void execute() {televisionReceiver.on();}@Overridepublic void undo() {televisionReceiver.off();}
}
/*** 关闭电视命令** @author wenqiang* @date 2023/6/1*/
public class TelevisionOffCommand implements Command {private TelevisionReceiver televisionReceiver = new TelevisionReceiver();@Overridepublic void execute() {televisionReceiver.off();}@Overridepublic void undo() {televisionReceiver.on();}
}

将新设备的命令增加到控制界面

public class Client {public static void main(String[] args) {// 创建一个控制界面RemoteController remoteController = new RemoteController();// 设置命令remoteController.setCommond("灯-开", new LightOnCommand());remoteController.setCommond("灯-关", new LightOffCommand());remoteController.setCommond("电视-开", new TelevisionOnCommand());remoteController.setCommond("电视-关", new TelevisionOffCommand());// 执行命令remoteController.on("灯-开");remoteController.on("电视-开");remoteController.on("电视-关");// 回撤命令remoteController.undo();remoteController.undo();}
}

执行结果

在这里插入图片描述

http://www.hkea.cn/news/682179/

相关文章:

  • 镇江做网站需要多少钱企业网站模板设计
  • 西安seo优化系统网页seo
  • 如何用网站模板做网站广州网络营销推广
  • 承德手机网站建设seo推广排名
  • wordpress块引用一个网站可以优化多少关键词
  • 360网站卖东西怎么做的无锡seo优化公司
  • 邢台人民网站百度视频推广怎么收费
  • 常州天启建设公司网站高端快速建站
  • ppt模板免费下载网站不用登录seo测试工具
  • 四川建设人才网官网查询阜新网站seo
  • 太原网站开发定制百度网盘官网下载
  • 业主装修日记那个网站做的好片多多可以免费看电视剧吗
  • 租车网站建设站长之家源码
  • 昌吉州回族自治州建设局网站地产渠道12种拓客方式
  • 北京市网站公司网络项目免费的资源网
  • 电子商务网站规划、电子商务网站建设站长工具 忘忧草
  • 凡科建网关键词优化公司哪家好
  • seo排名推广工具seo公司多少钱
  • 做视频网站赚钱怎么在百度上推广自己的公司信息
  • 网站建设凡科厦门网站建设平台
  • 互联网行业pest分析福州百度快速优化排名
  • 做网站的接私活犯法吗如何对网站进行推广
  • 身高差效果图网站优化师和运营区别
  • 谷歌wordpress建站搜索引擎算法
  • .net 购物网站开发源代码发布信息的免费平台
  • 自己做一网站大学生网络营销策划书
  • 关于网站建设的文章百度域名收录提交入口
  • 国人在线做网站推广图片大全
  • 郑州网站建设七彩科技四年级说新闻2023
  • 在什么网站上做自媒体seo整站怎么优化