安徽省建设法制协会网站龙岗中心城网站建设
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:02
当前位置: 首页 > news >正文
安徽省建设法制协会网站,龙岗中心城网站建设,可以做软文的网站,阿里企业邮箱登陆入口命令模式简介 命令模式定义 命令模式#xff08;Command Pattern#xff09;是一种在面向对象程序设计中常用的行为型设计模式。命令模式的核心思想在于将请求封装成一个对象#xff0c;从而使发出请求的责任和执行请求的责任分割开。它可以让请求发送者和请求接收者之间消…命令模式简介 命令模式定义 命令模式Command Pattern是一种在面向对象程序设计中常用的行为型设计模式。命令模式的核心思想在于将请求封装成一个对象从而使发出请求的责任和执行请求的责任分割开。它可以让请求发送者和请求接收者之间消除彼此之间的耦合关系。这种模式的关键在于将请求的行为参数化使得不同的请求可以在不同时间由不同的对象来处理。同时它支持对请求排队、记录请求日志以及实现可撤销的操作。 命令模式包含以下角色 命令角色Command这是一个抽象类或接口它定义了执行命令的方法,通常包含执行execute方法,但不实现具体的命令行为。具体命令角色Concrete Command实现了命令接口持有接收者的引用并在执行方法中调用接收者的方法来执行具体的命令行为;实现execute()方法负责调用接收者的相应操作。接收者角色Receiver接收者是执行命令的对象它实现了命令所需要执行的具体操作。接收者可以有多个每个接收者都可以执行不同的操作。请求者角色Invoker请求者持有命令对象的引用并通过调用命令的execute()方法来执行请求。它不需要知道命令的具体实现细节只需知道如何调用命令对象。负责调用命令对象执行请求相关的方法叫做行动方法如action()。客户端Client创建具体命令对象并设置其接收者将命令对象传递给调用者执行请求。 命令模式优缺点 优点 解耦合命令模式降低了调用者和接收者之间的耦合度。调用者只需知道命令的接口而不需要知道命令的具体实现细节从而降低系统的耦合度。可扩展性新的命令可以很容易地添加到系统中而无需修改现有的代码结构从而不影响现有的命令符合开闭原则。支持撤销和重做由于命令被封装成对象在具体命令类中保存状态可以轻松地实现命令的撤销和重做功能。日志记录可以在命令对象中增加日志记录功能记录命令的执行情况。这对于系统的调试和审计非常有帮助。容易实现队列和宏命令可以创建宏命令复合命令即把多个简单命令组合成一个更复杂的命令。更好的安全性命令模式可以帮助限制对敏感方法的访问权限因为命令接口可以隐藏这些方法的实现细节。 缺点 过多的具体命令类每个具体命令都需要一个单独的类可能会导致类的数量增加。如果系统中的命令种类非常多可能会导致产生大量的具体命令类系统复杂性引入了额外的类和对象增加了系统的复杂性。执行效率由于命令被封装成对象可能会导致执行效率略有降低特别是在需要大量命令对象的情况下。可能增加对象数量为了支持撤销操作每个命令可能需要保存额外的状态信息这会增加对象的数量。 使用场景 撤销和重做操作当需要支持撤销和重做操作时可以使用命令模式将每个操作封装成一个命令对象从而实现撤销和重做功能。队列请求当需要将请求排队、记录请求日志、支持事务等场景时可以使用命令模式将请求封装成命令对象然后由调用者依次执行这些命令对象。宏命令当需要将多个简单命令组合成一个复合命令时可以使用命令模式。远程控制和自动化在远程控制系统中可以使用命令模式来发送远程指令给接收设备。日程安排系统在日程安排系统中可以使用命令模式实现对日程的增加、删除、修改等操作支持撤销和重做功能。GUI 应用程序在图形用户界面中命令模式可以用来处理用户的输入事件例如按钮点击、菜单选项选择等日志记录和历史追踪命令模式可以用来记录操作的历史这对于审计和调试非常有用。 以下举一个命令模式的例子 下面通过一个简单的例子来演示。 假如我们自己开发一个音乐播放器有播放功能、切换上一首功能、切换下一首功能、暂停功能我们自己去操作的时候并不是直接调用音乐播放器的方法而是通过一个控制条去传达指令给播放器内部。那么每个按钮就相当于是对一条命令的封装。 创建接收者角色Receiver /*** 音乐播放器作为接收者角色Receiver/ public class MusicPlayer {public void play() {System.out.println(播放);}public void stop() {System.out.println(暂停);}public void previousSong() {System.out.println(拖动进度条);}public void nextSong() {System.out.println(停止播放);} }创建命令角色Command /** 命令角色Command/ public interface Command {void execute(); }创建4个具体命令角色Concrete Command分别是实现播放暂停上一首下一首的操作 /** 播放操作/ public class Play implements Command{private MusicPlayer musicPlayer;public Play(MusicPlayer musicPlayer) {this.musicPlayer musicPlayer;}Overridepublic void execute() {musicPlayer.play();} }/** 暂停操作/ public class Stop implements Command{private MusicPlayer musicPlayer;public Stop(MusicPlayer musicPlayer) {this.musicPlayer musicPlayer;}Overridepublic void execute() {musicPlayer.stop();} }/** 切换上一首歌操作/ public class PreviousSong implements Command{private MusicPlayer musicPlayer;public PreviousSong(MusicPlayer musicPlayer) {this.musicPlayer musicPlayer;}Overridepublic void execute() {musicPlayer.previousSong();} }/** 切换下一首歌操作/ public class NextSong implements Command{private MusicPlayer musicPlayer;public NextSong(MusicPlayer musicPlayer) {this.musicPlayer musicPlayer;}Overridepublic void execute() {musicPlayer.nextSong();} }创建请求者角色Invoker import java.util.ArrayList; import java.util.List;/** 请求者角色Invoker/ public class Action {private ListCommand actions new ArrayListCommand();public void addAction(Command action){actions.add(action);}public void execute(Command action){action.execute();}public void executes(){for (Command action:actions) {action.execute();}actions.clear();} }创建客户端Client /** 客户端Client*/ public class Client {public static void main(String[] args) {MusicPlayer musicPlayer new MusicPlayer();Action action new Action();//立即执行操作action.execute(new Play(musicPlayer));action.execute(new Stop(musicPlayer));action.execute(new PreviousSong(musicPlayer));action.execute(new NextSong(musicPlayer));System.out.println();// 将方法添加到列表中方便执行多条操作// 例如音乐播放器点下一首时会切换下一首歌并进行播放这就设计一个按钮就行然后这个按钮可以直接实现切换下一首歌并播放的操作Action actionOther new Action();actionOther.addAction(new NextSong(musicPlayer));actionOther.addAction(new Play(musicPlayer));actionOther.executes();} }输出结果如下所示 播放 暂停 切换到上一首歌 切换到下一首歌切换到下一首歌 播放在上述例子中 展示了命令模式在音乐播放器中的应用。MusicPlayer 类作为接收者提供了播放、暂停、上一首和下一首的操作。Command 接口定义了命令的通用执行方法。四个具体命令类 (Play, Stop, PreviousSong, NextSong) 实现了这些操作并持有 MusicPlayer 的引用。Action 类作为调用者管理命令列表并执行命令。客户端通过 Action 对象立即执行单个命令或批量执行一系列命令实现了命令的解耦和灵活管理。 总而言之 命令模式是一种行为设计模式用于将请求封装为对象以便使用不同的请求对客户端进行参数化支持命令队列、日志记录和撤销操作。核心概念包括命令接口Command、具体命令类Concrete Command、接收者Receiver和调用者Invoker。命令接口定义了所有命令共有的执行方法具体命令类实现了命令接口并封装了接收者对象的引用接收者执行实际的业务逻辑调用者则请求命令对象执行命令。命令模式的优势在于降低调用者与接收者之间的耦合度支持撤销操作和宏命令易于扩展新命令。但同时也可能导致产生大量具体命令类客户端需要管理命令对象且可能存在性能开销。适用于GUI应用程序、事务处理、宏命令、命令行界面和需要撤销操作的场景。 以上代码下载请点击该链接https://github.com/Yarrow052/Java-package.git
相关文章
-
安徽省工程建设监理协会网站开发公司年度工作总结及明年工作计划
安徽省工程建设监理协会网站开发公司年度工作总结及明年工作计划
- 技术栈
- 2026年03月21日
-
安徽汽车网网站建设网站推广的定义
安徽汽车网网站建设网站推广的定义
- 技术栈
- 2026年03月21日
-
安徽龙山建设网站做ppt的软件模板下载网站
安徽龙山建设网站做ppt的软件模板下载网站
- 技术栈
- 2026年03月21日
-
安徽省建设干校网站多国语言网站建设
安徽省建设干校网站多国语言网站建设
- 技术栈
- 2026年03月21日
-
安徽省建设厅焊工证查询网站网站建设精美模板
安徽省建设厅焊工证查询网站网站建设精美模板
- 技术栈
- 2026年03月21日
-
安徽省建设协会网站赣州人事人才网
安徽省建设协会网站赣州人事人才网
- 技术栈
- 2026年03月21日






