设计模式-命令模式(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 List commandList = 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:设计模式-中介者模式(Mediator Pattern)
下一篇:设计模式-备忘录模式(Memento Pattern)

发表评论

最新留言

很好
[***.229.124.182]2024年04月21日 11时02分20秒