设计模式-命令模式(Command)

命令模式是一种行为设计模式,用于将请求封装为对象,从而实现调用者与接收者的解耦。它允许系统扩展新的命令或命令组,降低了耦合度。在命令模式中,包括Command接口、ConcreteCommand实现类、Invoker请求者和Receiver接收者角色。以开灯关灯为例,Light是Receiver,Person是Invoker,LigthOnCommand和LightOffCommand是ConcreteCommand。
摘要由CSDN通过智能技术生成

概述

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

适用场景

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

优点

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

缺点

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

模式角色

  • Command : 声明执行操作的接口。

  • ConcreteCommand :

    • 将一个接收者对象绑定于一个动作
    • 调用接收者相应的操作,以实现Excute
  • Invoker : 要求该命令执行这个请求。可以理解为下达命令的对象, 有时候可以省略直接让Client担任这个角色

  • Receiver : 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。

  • Client : 创建一个具体命令对象并设定它的接收者。

代码实现

业务场景

以开灯关灯为例, 类与命令模式中角色对应如下:

  • Command接口 : 对应模式中Command接口
  • LighetOnCommand, LightOffCommand : 对应模式中ConcreteCommand角色
  • Person : 对应模式中Invoker角色
  • Light : 对应模式中Receiver角色
  • Client : 对应模式中Client角色, 测试代码

完整UML类图

省略了Client测试类的类图:
在这里插入图片描述

代码

Command接口 :

/**
 * 命令接口
 *
 * @author 七夜雪
 * @create 2018-11-24 18:17
 */
public interface Command {
   

    public void excute();
}

LighetOnCommand, LightOffCommand :

/**
 * @author 七夜雪
 * @create 2018-11-24 18:20
 */
public class LightOffCommand implements Command {
   

    private Light
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值