设计模式-命令模式(Command Pattern)
发布日期:2021-06-30 16:02:09
浏览次数:2
分类:技术文章
本文共 2829 字,大约阅读时间需要 9 分钟。
推荐:
命令模式
定义
将命令封装成对象,从而方便对命令对象进行传递、管理与扩展。并且接收者可以识别这些请求对象,然后执行相应的行为。类型
行为型。UML类图
角色
- Receiver:接收者角色,该类是命令的具体执行者,负责具体实施或者执行一个请求,说的通俗一点,就是真正干活的角色。
- Command:抽象命令角色,定义所有的具体命令类的抽象接口。
- ConcreteCommand:具体命令角色,该类实现了Command接口。
- Invoker:请求者角色,该类的职责是调用命令对象执行具体的请求。
例子
课程视频可以打开、关闭,员工可以向课程视频发出打开、关闭课程视频的命令。CourseVideo类(接收者角色),接收员工(请求者角色)的命令,并且是命令的真正执行者,从代码也可以看出,open()方法
、close()方法
。
package com.kaven.design.pattern.behavioral.command;public class CourseVideo { private String name; public CourseVideo(String name) { this.name = name; } public void open(){ System.out.println(this.name+"-课程视频开放"); } public void close(){ System.out.println(this.name+"-课程视频关闭"); }}
Command接口(抽象命令角色)。
package com.kaven.design.pattern.behavioral.command;public interface Command { void execute();}
OpenCourseVideoCommand类(具体命令角色),打开课程视频命令类,实现了Command接口。
package com.kaven.design.pattern.behavioral.command;public class OpenCourseVideoCommand implements Command { private CourseVideo courseVideo; public OpenCourseVideoCommand(CourseVideo courseVideo) { this.courseVideo = courseVideo; } public void execute() { courseVideo.open(); }}
CloseCourseVideoCommand类(具体命令角色),关闭课程视频命令类,实现了Command接口。
package com.kaven.design.pattern.behavioral.command;public class CloseCourseVideoCommand implements Command { private CourseVideo courseVideo; public CloseCourseVideoCommand(CourseVideo courseVideo) { this.courseVideo = courseVideo; } public void execute() { courseVideo.close(); }}
Staff类(请求者角色),Staff类有一个List
用来存储命令对象,executeCommands()方法
用来实现调用命令对象执行具体的请求。
package com.kaven.design.pattern.behavioral.command;import java.util.ArrayList;import java.util.List;public class Staff { private ListcommandList = new ArrayList (); public void addCommand(Command command){ commandList.add(command); } public void executeCommands(){ for (Command command : commandList){ command.execute(); } commandList.clear(); }}
应用层代码:
package com.kaven.design.pattern.behavioral.command;public class Test { public static void main(String[] args) { CourseVideo courseVideo = new CourseVideo("Java设计模式"); OpenCourseVideoCommand openCourseVideoCommand = new OpenCourseVideoCommand(courseVideo); CloseCourseVideoCommand closeCourseVideoCommand = new CloseCourseVideoCommand(courseVideo); Staff staff = new Staff(); staff.addCommand(openCourseVideoCommand); staff.addCommand(closeCourseVideoCommand); staff.executeCommands(); }}
输出:
Java设计模式-课程视频开放Java设计模式-课程视频关闭
这里便完成了一个简单的命令模式。
适用场景
- 请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交互。
- 需要抽象出等待执行的行为。
优点
- 降低了系统耦合度。
- 新的命令可以很容易添加到系统中去。
缺点
- 使用命令模式可能会导致某些系统有过多的具体命令类。
如果有说错的地方,请大家不吝赐教(记得留言哦~~~~)。
转载地址:https://kaven.blog.csdn.net/article/details/104119674 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月21日 11时02分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
scala list
2019-05-01
svn服务器安装
2019-05-01
spark 笔记1
2019-05-01
shell dirname basename
2019-05-01
未来已至,5G加持下的云游戏将走向何方?
2019-05-01
计算机网络 —— 网络层 1.
2019-05-01
Android生命周期
2019-05-01
Android 之 ContentProvider 与 ContentResolver
2019-05-01
【接口自动化】
2019-05-01
Spring Boot 安全框架 Shiro 入门
2019-05-01
如何用一句话激怒互联网人?
2019-05-01
用 Python 爬了点你们喜欢的电影
2019-05-01
推荐一位川大零基础转行 Python 的人生勇士
2019-05-01
讲真,做Python一定不要只会一个方向!
2019-05-01
Python 2大限来了!113天后自生自灭,官方不再维护更新
2019-05-01
GitHub 热榜第一的 Python 抢票神器!节假日能用上
2019-05-01
Python解惑之:True与False
2019-05-01
你要的微信小程序终于来了
2019-05-01
为什么执行 x in range(y) 如此快?
2019-05-01
看完这篇文章你还不理解 Python 装饰器,只有一种可能...
2019-05-01