隐藏页面特效

设计模式--命令模式

类图

 

 

源码

Command.java package com.demo; public interface Command { /** * 执行命令 */ void execute(); void redo(); /** * 撤销命令 */ void undo(); } Light.java package com.demo; public class Light { public void on() { System.out.println("灯亮了..."); } public void off() { System.out.println("灯暗了..."); } } LightOffCommand.java package com.demo; public class LightOffCommand implements Command { private Light light; public LightOffCommand(Light light) { this.light = light; } @Override public void execute() { light.off(); } @Override public void redo() { light.on(); } @Override public void undo() { light.on(); } } LightOnCommand.java package com.demo; public class LightOnCommand implements Command { private Light light; public LightOnCommand(Light light) { this.light = light; } @Override public void execute() { light.on(); } @Override public void redo() { light.off(); } @Override public void undo() { light.off(); } } NoCommand.java package com.demo; public class NoCommand implements Command { @Override public void execute() { // TODO 自动生成的方法存根 } @Override public void redo() { // TODO 自动生成的方法存根 } @Override public void undo() { // TODO 自动生成的方法存根 } } RemoteInvoker.java package com.demo; public class RemoteInvoker { /** * 开关命令数组,模拟有很多对开关数组 */ private Command[] onCommands; private Command[] offCommands; /** * 撤销(回退)命令 */ private Command undoCommand; private Command redoCommand; public RemoteInvoker(int length) { // 有几组开关,就设置多少数组 onCommands = new Command[length]; offCommands = new Command[length]; // 把每个命令初始化成空命令,避免空指针异常 Command noCommand = new NoCommand(); undoCommand = noCommand; redoCommand = noCommand; for (int i = 0; i < length; i++) { onCommands[i] = noCommand; offCommands[i] = noCommand; } } public void setCommond(int slot, Command onCommand, Command offCommand) { onCommands[slot] = onCommand; offCommands[slot] = offCommand; } public void onButton(int slot) { onCommands[slot].execute(); //为撤销(回退)按钮记录动作 undoCommand = onCommands[slot]; redoCommand = onCommands[slot]; } public void offButton(int slot) { offCommands[slot].execute(); //为撤销(回退)按钮记录动作 undoCommand = offCommands[slot]; redoCommand = onCommands[slot]; } public void undoButton() { undoCommand.undo(); } public void redoButton() { // TODO 自动生成的方法存根 redoCommand.redo(); } } Client.java package com.demo; public class Client { public static void main(String[] args) { // 1、创建接收者 Light light = new Light(); // 2、创建命令对象 LightOnCommand lightOnCommand = new LightOnCommand(light); LightOffCommand lightOffCommand = new LightOffCommand(light); // 3、创建一组开关并用命令对象装载它 RemoteInvoker invoker = new RemoteInvoker(1); invoker.setCommond(0, lightOnCommand, lightOffCommand); // 4、测试 invoker.onButton(0); invoker.offButton(0); System.out.println("撤销命令"); invoker.undoButton(); System.out.println("重做命令"); invoker.redoButton(); } }

 

 

测试截图

 

 


__EOF__

本文作者往心。
本文链接https://www.cnblogs.com/lx06/p/15688528.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   往心。  阅读(25)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
历史上的今天:
2020-12-14 jsp标签问题
点击右上角即可分享
微信分享提示