上篇介绍了命令模式的理论知识,这里再写两个小例子,加深理解。
1、撤销命令,关键在于命令执行的时侯保存这个命令对象,这就是把操作封装成对象的好处。
//这个不变
public class Light {
public void off(){
System.out.println("off...");
}
public void on(){
System.out.println("on...");
}
}
//Command接口添加一个undo()
public interface Command {
public void execute();
public void undo();
}
public class LightOffCommand implements Command {
Light light;
public LightOffCommand(Light light){
this.light = light;
}
public void execute() {
light.off();
}
//在这里进行之前操作的逆操作,实现“撤销”
public void undo(){
light.on();
}
}
public class LightOnCommand implements Command {
Light light;
public LightOnCommand(Light light){
this.light = light;
}
public void execute() {
light.on();
}
public void undo(){
light.off();
}
}
public class RemoteControl {
Command c;
Command lastCommand;
public void setCommand(Command c){
this.c = c;
}
public void pressButton(){
c.execute();
//保存命令对象的引用
lastCommand = c;
}
public void undoPressButton(){
lastCommand.undo();
}
}
测试:
public class CommandLoader {
public static void main(String[] args) {
RemoteControl src = new RemoteControl();
Light light = new Light();
LightOnCommand lo = new LightOnCommand(light);
src.setCommand(lo);
//操作
src.pressButton();
System.out.println();
//撤销操作
src.undoPressButton();
}
}
输出:
on...
off...
这里模拟的是简单操作,实际上可能有针对Light状态值的操作,但实现原理是一样的。
2、宏命令:创建一个新类MacroCommand,封装多个命令,达到一次性执行多个命令的目的。
//此类与一般的具体命令是一个级别的
public class MacroCommand implements Command{
//保存多个命令对象
Command[] commands;
public MacroCommand(Command[] commands) {
this.commands = commands;
}
public void execute(){
for (Command c : commands) {
c.execute();
}
}
}
public class CommandLoader {
public static void main(String[] args) {
//遥控器
RemoteControl rc = new RemoteControl();
//三个命令
LightOnCommand lo = new LightOnCommand(new Light());
TvOnCommand to = new TvOnCommand(new Tv());
AirConditionOnCommand ao = new AirConditionOnCommand(new AirCondition());
Command[] cs = {lo,to,ao};
//宏命令
MacroCommand mc = new MacroCommand(cs);
rc.setCommand(mc);
rc.pressButton();
}
}
执行结果是:
on...
tv on...
air condition on...
分享到:
相关推荐
人脸识别神经网络,数据集为CelebA,基于Pytorch实现 采用彼此独立的40个卷积神经网络,可识别脸部40个特征。 包括: 5_o_Clock_Shadow:刚长出的双颊胡须 Arched_Eyebrows:柳叶眉 Attractive:吸引人的 ...
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统...
可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现...
深入浅出设计模式 pdf 深入浅出设计模式 中文版 设计模式 下载说明: 因个人上传资源大小只能是20M,而该书的PDF格式过大,所以只能分开上传。如有不便请谅解。【该书一共13章,在上传的时候我尽量按章节顺序打包...
以下是一个简单的示例,展示了如何使用C++11的`std::wstring_convert`进行转换: ```cpp #include #include #include std::wstring utf8_to_utf16(const std::string& utf8_str) { std::wstring_convert<std::...
2. 回馈制动:在某些传动系统中,当需要减速或者下坡时,电动机可以利用负载的动能反向推动电机运转,从而产生电流回馈到电源系统中。这种制动方式适用于提升机、起重机等设备,具有节能的特点,同时对电网的冲击较...
### 白话说电气_相电压和线电压的分析 #### 一、相电压与线电压的概念 在我国,普遍采用的是三相四线制供电系统。在这个系统中,三根相线(A、B、C相)与一根地线(零线)构成了整个供电网络。在三相四线制中,相...
在软件设计中,设计模式是一种解决常见问题的模板,它们是经过验证的、高效的设计解决方案。本文将聚焦于创建型设计模式,特别是单例模式和原型模式,这两种模式在对象的创建方面扮演着重要的角色。 单例模式是一种...
# 1.原理理解 # 1.1 textrank原理见 Textrank.docx ## 1.2 代码见: ```python #!/usr/bin/env python # -*- coding: utf-8 -*- ...from __future__ import absolute_import, unicode_literals ...
常见的行为型模式有策略模式、模板方法模式、观察者模式、迭代器模式、命令模式、职责链模式、访问者模式、备忘录模式、解释器模式。这些模式提供了处理算法、事件处理和复杂控制流的方法。 《白话设计模式》可能会...
08 | 白话容器基础(四):重新认识Docker容器08 | 白话容器基础(四):重新认识Docker容器08 | 白话容器基础(四):重新认识Docker容
### 白话Windows编程知识点详解 #### 一、消息的概念 **消息**是Windows操作系统中一个非常核心且基础的概念,它是程序之间以及程序内部不同组件之间进行通信的主要方式。简单来说,消息是一种软件机制,用来通知...
为了更系统的学习设计模式,特地开了这样一个基于Java的设计模式【集中营】,都是笔者在实际工作中用到过或者学习过的一些设计模式的一些提炼或者总检。慢慢地初见规模,也有几个朋友给我点鼓励,给了star。本文工程...
紧接着,我详细介绍了容器技术圈在过去五年里的“风云变幻”,而通过这部分内容,我希望你能理解这样一个道理:05 | 白话容器基础(一):从进程说开去容器本身没有价
GPT2-Chinese-old_gpt_2:GPT2实现藏头诗生成,含训练好的模型,可以输入格律、风格和藏头字,自动生成藏头诗 bert2transformer_on_NMT:Bert实现翻译模型,含训练好的模型,输入文言文或者古诗词,会自动生成相应的...
然后,通过一个小程序的示例,验证了容器里的应用进程看到的文件系统是一个完全独立的文件系统。 知识点一:容器的本质是一种特殊的进程 容器的本质是一种特殊的进程,这是理解容器镜像的基础概念。通过使用 ...
08 白话容器基础(四):重新认识Docker容器.pdf
文件下载 已经训练好的facenet_mobilenet.h5和facenet_inception_resnetv1.h5可以在百度网盘下载。 ... 训练用的CASIA-WebFaces数据集以及评估用的LFW数据集可以在百度网盘下载。 ... 预测步骤 a、使用预训练权重 ...
java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...