命令模式

声明 本文内容属于《Head First 设计模式》阅读笔记,文中涉及到的知识案例等直接或间接来源于该书。《Head First 设计模式》通过有趣的图表+文字的形式,让人自然学习设计模式,非常棒推荐阅读


命令模式概念(白话)

        现有命令执行者(对象)A,A本身有一大堆可以执行的指令(即:方法),如:指令x、指令y、指令z……;还有一个命令(对象)B,B持有A,在B中有一个(或多个)触发方法,触发方法中的逻辑其实是:A对象调用A的一个或一些指令(方法),进而完成某些功能;还有命令请求者(对象)C,A与C不直接关联,而是通过B来间接关联;这样一来,当命令请求者C需要实现某个功能时,就会通知B(即:调用B的触发方法),进而通知到了B内部的对象A,(由于B对象中的触发方法,其实是对A对象的某个或某些方法的进一步封装,所以)最后由A实现了C需要的功能

示例一个命令对象类(辅助理解)
在这里插入图片描述
示例一个命令请求者类(辅助理解)
在这里插入图片描述


案例(辅助理解)

提示 下面给出的代码示例,只是相对关键的一部分,完整的代码可去文末链接处获取。

情景介绍

       现有一遥控器,遥控器上有一些槽,每个槽对应一个家电(如:客厅灯、厨房灯、电风扇),同时每个槽上有两个按钮分别控制对应家电的开与关(或更多按钮来调节家电的档位)。考虑到命令模式的优点是,可以将“命令请求者”与“命令执行者”解耦开来。所以这里采用命令模式来实现,那么对应的,遥控器就是“命令请求者”,各大家电的厂商就是“命令执行者”,当然这两者中间还需要有命令对象来进行关联。

  • 遥控器长这样:
    在这里插入图片描述

  • 项目结构长这样:
    在这里插入图片描述

命令接口与命令对象类

  • 命令接口
    在这里插入图片描述

  • 灯的命令对象类:
    在这里插入图片描述注:上图只是一个开灯的命令类,对应的关灯的命令类与其类似。

  • 风扇的命令对象类:
    在这里插入图片描述

命令执行者

  • 客厅灯的命令执行者:
    在这里插入图片描述
    注:在上图中,开灯、关灯的共有逻辑写在AbstractLight类里面在,子类LivingRoomLight就起了个区分灯类型的作用。
    注:这里只给了客厅灯,厨房灯的类似,就不给出了。

  • 电风扇的命令执行者:
    在这里插入图片描述

命令请求者

在这里插入图片描述

测试一下

测试一:

  • 测试类:
    在这里插入图片描述
  • 运行主函数,程序输出:
    在这里插入图片描述

测试二:

  • 测试类:
    在这里插入图片描述
  • 运行主函数,程序输出:
    在这里插入图片描述

命令模式学习完毕 !


^_^ 如有不当之处,欢迎指正

^_^ 参考资料
        《Head First 设计模式》
Eric Freeman & Elisabeth Freeman with Kathy Sierra & Bert Bates著,O’Reilly Taiwan公司译,UMLChina改编

^_^ 测试代码托管链接
         https://github.com/JustryDeng…DesignPattern

^_^ 本文已经被收录进《程序员成长笔记》 ,笔者JustryDeng

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值