23种设计模式之行为型模式:命令模式

一:什么是命令模式?

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。
请求以命令的形式包裹在对象中,并传给调用对象
调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

二:进一步了解命令模式

目的:
将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化

主要解决:
行为请求者与行为实现者通常是一种紧耦合的关系。
但比如需要对行为进行记录、撤销或重做、事务等处理时

何时使用:
在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。

如何解决:
通过调用者调用接受者执行命令,顺序:调用者→命令→接受者。

优点:
1、降低了系统耦合度。
2、新的命令可以很容易添加到系统中去。

缺点:
使用命令模式可能会导致某些系统有过多的具体命令类。

注意事项:系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作,也可以考虑使用命令模式,见命令模式的扩展。

三:实现(CMD命令Demo)

一个电脑接口,一个CMD功能类,两个电脑接口实现类(组合了CMD对象,使用CMD对象调用CMD功能),一个命令调用类(存对象,执行对象中的方法)。

电脑接口

//电脑接口
public interface Computer {
    //电脑的执行方法
    void execute();
}

CMD命令类

//CMD命令类
public class CMD {
    public void mspaint(){
        System.out.println("调用了画板功能");
    }
    public void notepad(){
        System.out.println("调用了记事本");
    }
}

CMD命令具体执行类

//CMD命令具体执行类
public class Mspaint implements Computer {
    private CMD cmd;

    public Mspaint(CMD cmd) {
        this.cmd = cmd;
    }

    @Override
    public void execute() {
        cmd.mspaint();
    }
}

CMD命令具体执行类

//CMD命令具体执行类
public class Notepad implements Computer {
    private CMD cmd;

    public Notepad(CMD cmd) {
        this.cmd = cmd;
    }

    @Override
    public void execute() {
        cmd.notepad();
    }
}

命令调用类

import java.util.ArrayList;
import java.util.List;
//命令调用类
public class CommandCall {
    private List<Computer> orders = new ArrayList<>();

    //存命令
    public void takeOrders(Computer order){
        orders.add(order);
    }
    //执行命令
    public void executeOrders(){
        for (Computer order:orders) {
            order.execute();
        }
    }
}

测试

//测试
public class Test {
    public static void main(String[] args) {
        CMD cmd = new CMD();
        Mspaint mspaint = new Mspaint(cmd);
        Notepad notepad = new Notepad(cmd);

        CommandCall commandCall = new CommandCall();
        commandCall.takeOrders(mspaint);
        commandCall.takeOrders(notepad);
        commandCall.executeOrders();
    }
}

执行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值