java设计模式之命令

本文通过遥控器控制电视的例子,深入浅出地介绍了Java中命令设计模式的概念。文章详细阐述了模式的结构,包括抽象命令角色、具体命令角色、抽象接收者角色、具体接收者角色和调用者,并给出了具体实现代码。此外,还探讨了命令模式的特点和适用场景。
摘要由CSDN通过智能技术生成

一.简介

我们在给使用遥控器给控制电视的时候,这种方式正符合了我们java中的命令设计模式,我们自己就是客户端,电视代表了接收者,它会执行具体的动作,整个遥控器是调用者,具体按键开机,关机,变化频道是具体的命令类.

二.结构

  • 抽象命令角色:它定义了具体命令者的统一的接口,该接口中的方法由调用者来统一调用.
  • 具体命令角色:实现了抽象命令角色,引入了接收者,使用接收者做具体的命令操作.
  • 抽象接收者角色:定义了具体接收者的基层接口.
  • 具体接受者的角色:实现了首相接收者角色,实现了执行命令的具体逻辑.
  • 调用者:一个具体类,引入了命令角色,调用命令角色的方法.
类图

三.代码

package command;

/**
 * Created by ZouHaiBo on 2018/1/31.
 * 命令模式
 *
 *  遥控器 --- 具体按键 -- 电视  ----- 人
 *    |           |        |         |
 *    |           |        |         |
 *  调用者----  命令类-----接受者-----客户端
 *
 */

// 抽象命令类
interface Command {

  void command();
}
// 开机命令
class OnCommand implements Command{

    private Reciver reciver;

    public OnCommand(Reciver reciver) {
        this.reciver = reciver;
    }

    @Override
    public void command() {
        reciver.on();
    }
}
// 关机命令
class OffCommand implements Command{

    private Reciver reciver;

    public OffCommand(Reciver reciver) {
        this.reciver = reciver;
    }

    @Override
    public void command() {
        reciver.off();
    }
}

// 抽象接受者
interface Reciver {
    void on();
    void off();
}
// 具体接受者
class DianShiReciver implements Reciver{

    @Override
    public void on() {
        System.out.println("开机");
    }

    @Override
    public void off() {
        System.out.println("关机");
    }
}
// 调用者
class Invoker {

    private Command command;
    public void setCommand(Command command) {
        this.command = command;
    }

    public void excute() {
        command.command();
    }
}

public class Client {
    public static void main(String[] args) {

        Invoker invoker = new Invoker();
        invoker.setCommand(new OnCommand(new DianShiReciver()));
        invoker.excute();

        invoker.setCommand(new OffCommand(new DianShiReciver()));
        invoker.excute();
    }

}

四.特点

  • 调用操作的人和接收者(也就是具体的执行者)解耦合;
  • 添加新的命令简单;
  • 客户端很方便就可以使用复合命令进行操作;
  • 具体命令者角色可以被不同的请求者角色重用.

五.使用场景

  • 需要抽象出待执行的操作,然后以参数的形式提供出来;
  • 在不同的时刻指定,排列不同的指令;
  • 需要支持取消操作;
  • 需要支持日志功能;
  • 需要支持事物操作;

六.参考文献

大话设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值