Android设计模式(二十)-- 命令模式

源代码
GitHub源代码

1.本文目标

本文目标是为了让大家认识并理解命令模式

2.基本套路

定义:将请求封装成对象,以便使用不同的请求
类型:行为型
选择关键点:请求者是否不需要关心命令的执行只知道接受者
设计原则:遵循迪米特、开闭原则
使用概率:20%
难度系数:中高

3.适用场景

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

4.使用步骤

用栗子能更好的说明问题,请继续往下看

5.举个栗子

我们用具体的代码去更好的理解这个设计模式

5.1栗子说明

  • 背景:网站上课程是有视频的,免费打开视频让大家看或者关闭这个视频收费才能看
  • 目的:用命令模式模拟

5.2使用步骤

实现代码如下:

步骤1.创建命令接口

public interface Command {
    void execute();
}

步骤2.创建课程视频

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

步骤3.创建打开课程视频命令和关闭课程视频命令

public class OpenCourseVideoCommand implements Command {
    private CourseVideo courseVideo;

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

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

public class CloseCourseVideoCommand implements Command {
    private CourseVideo courseVideo;

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

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

步骤4. 创建工作人员类可以执行一组命令

public class Staff {
    private List<Command> commandList = new ArrayList<>();
    public void addCommand(Command command){
        commandList.add(command);
    }

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

步骤5. 测试

 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();
 }

6.优点

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

7.缺点

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

8.总结

本文只是对命令模式进行一个分享,接下来会从创建型模式,结构型模式,行为型模式,这三大类展开一个系列分享,大家可以持续进行关注,信仰年輕的设计模式,蟹蟹啦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 3,808评论 0 14
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,242评论 19 139
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 13,108评论 2 59
  • 早起习书宋·汪藻《春日》诗 一春略无十日睛, 处处浮云将雨行。 野田春水碧如镜, 人影渡傍鸥不惊。 桃花嫣然出篱笑...
    efab227f5376阅读 997评论 12 20
  • 之『邀请嘟来整理玩具的各种版本』 以前我是这样说的 版本1.嘟宝把玩具收下好吗? 嘟当没听见 版本2.请嘟把玩具收...
    嘟嘟小不点阅读 313评论 0 0