命令模式

一、命令模式介绍

1、定义与类型

定义:将“请求“封装成对象,以便使用不同的请求
命令模式解决了应用程序中对象的职责以及它们之间的通信方式
类型:行为型

2、适用场景

请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交互
需要抽象出等待执行的行为

3、优点

降低耦合
容易扩展新命令或者一组命令

4、缺点

命令的无限扩展会增加类的数量,提高系统实现复杂度

5、相关设计模式

命令模式和备忘录模式经常相互结合,例如保存命令的历史记录

二、代码示例

模拟场景:对课程视频下达开放或者关闭的命令

课程视频类:

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 + "课程视频关闭");
    }
}

命令接口:

public interface Command {
    void execute();
}

开放命令类:

public class OpenCourseVideoCommand implements Command{

    private CourseVideo courseVideo;

    public OpenCourseVideoCommand(CourseVideo courseVideo) {
        this.courseVideo = courseVideo;
    }

    @Override
    public void execute() {
        this.courseVideo.open();
    }
}

关闭命令类:

public class CloseCourseVideoCommand implements Command{

    private CourseVideo courseVideo;

    public CloseCourseVideoCommand(CourseVideo courseVideo) {
        this.courseVideo = courseVideo;
    }

    @Override
    public void execute() {
        this.courseVideo.close();
    }
}

调用命令的类:

public class Staff {
    private List<Command> commandList = new ArrayList<Command>();

    public void addCommand(Command command) {
        commandList.add(command);
    }
    public void executeCommands(){
        for (Command command : commandList) {
            command.execute();
        }
        commandList.clear();
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        CourseVideo courseVideo = new CourseVideo("命令模式课程");

        Command openCourseVideoCommand = new OpenCourseVideoCommand(courseVideo);
        Command closeCourseVideoCommand = new CloseCourseVideoCommand(courseVideo);

        Staff staff = new Staff();
        staff.addCommand(openCourseVideoCommand);
        staff.addCommand(closeCourseVideoCommand);

        staff.executeCommands();
    }
}

输出:
命令模式课程课程视频开放
命令模式课程课程视频关闭

三、源码示例

1、JDK中的Runnable

可理解为抽象的命令,实现Runnable后可理解为具体的执行的命令

2、junit中的Test

(0)

相关推荐

  • 轻松实现记录与撤销——C#中的Command模式

    Command模式属于行为模式,作为大名鼎鼎的23个设计模式之一,Command模式理解起来不如工厂模式,单例模式等那么简单直白.究其原因,行为模式着重于使用,如果没有编程实践,确实不如创造模式那么直 ...

  • Java设计模式【命令模式】

    命令模式 命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行.这个过程好在,三者相互解耦,任何一方都不 ...

  • 图解Java设计模式之命令模式

    智能生活项目需求 命令模式基本介绍 命令模式的原理类图 命令模式在Spring框架中JdbcTemplate应用源码分析 命令模式的注意事项和细节 智能生活项目需求 看一个具体的需求 我们买类一套智能 ...

  • 设计模式(十五)——命令模式(Spring框架的JdbcTemplate源码分析)

    设计模式(十五)——命令模式(Spring框架的JdbcTemplate源码分析)

  • 简说设计模式——命令模式

    一.什么是命令模式 在说命令模式前我们先来说一个小例子.很多人都有吃夜市的经历,对于那些推小车的摊位,通常只有老板一个人,既负责制作也负责收钱,我要两串烤串多放辣,旁边的人要了三串烤面筋不要辣,过了一 ...

  • PHP设计模式之命令模式

    PHP设计模式之命令模式 命令模式,也称为动作或者事务模式,很多教材会用饭馆来举例.作为顾客的我们是命令的下达者,服务员是这个命令的接收者,菜单是这个实际的命令,而厨师是这个命令的执行者.那么,这个模 ...

  • [PHP小课堂]PHP设计模式之命令模式

    [PHP小课堂]PHP设计模式之命令模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • Command 命令模式

    >>返回<C#常用设计模式> 1. 简介 2. 示例 1. 简介 把方法调用封装起来: 通过封装方法调用,可以把运算块封装成形,所以调用此运算对象不需要知道事情是如何进行的.通 ...

  • CommandPattern命令模式

    命令模式 1.定义 将一个请求封装成一个对象,从而可以使用不同的请求来参数化客户端. 命令模式通常有3种角色 Receiver:接收者角色.负责执行命令的角色 抽象接收者:具有所有特性的接收者的集合 ...

  • 【Java设计模式】 Java设计模式之(六)命令模式(Command Pattern)

    命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该 ...

  • 设计模式之命令模式

    让我们从一个简单的项目(遥控器)了解命令模式,然后再给出他的定义: 此项目地址: https://github.com/Stray-Kite/Design-Pattern/tree/master/sr ...