命令模式


1. 类图

image.png

  • Command:命令接口,声明执行的方法
  • ConcreteCommand:命令接口实现,持有并调用接收者的功能
  • Receiver:接收者,执行命令的对象
  • Invoker:要求命令对象执行请求,通常持有命令对象
  • Client:创建具体的命令对象,并设置命令对象的接收者

2. 示例

将请求封装成对象

2.1 命令接口

public interface Command {
    void execute();
}

2.2 命令实现

持有命令真正执行的对象

public class OpenCommand implements Command {
    private MainBoard mainBoard;
    public OpenCommand(MainBoard mainBoard){this.mainBoard = mainBoard;}
    @Override
    public void execute() {
        mainBoard.open();
    }
}

2.3 执行命令的对象

public interface MainBoard {
    void open();
}

2.4 触发命令对象执行

public class MainBoardImpl implements MainBoard {
    @Override
    public void open() {
        System.out.println("主板正在开机。。。");
        System.out.println("接通电源。。。");
        System.out.println("设别检查。。。");
        System.out.println("装载系统。。。");
        System.out.println("开机完成,请操作!!!");
    }
}

2.5 具体命令对象

public class Box {
    private Command command;
    public Box(Command command){this.command = command;}

    public void pressOpenBtn(){
        command.execute();
    }
}

2.6 客户端

public class Client {
    public static void main(String[] args) {
        // 1. 将命令与真正的实现组合在一起
        MainBoard mainBoard = new MainBoardImpl();
        Command command = new OpenCommand(mainBoard);

        // 2. 机箱设置按钮功能
        Box box = new Box(command);
        box.pressOpenBtn();
    }
}

3. 优点

  • 松散耦合
  • 更动态的控制
  • 更好的扩展性

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值