设计模式-行为型软件设计模式(三)

命令模式

简介

命令模式的目的是解除调用者和接受者之间的耦合。命令模式为相应客户请求的行动创建一个抽象,也就是设计一个命令接口类,用于声明一个共同的接口。该接口有一些具体的实现类,每个实现类代表一个不同类型的客户请求和相应的处理。
这里写图片描述
(1)客户类创建必要的接收器(Receiver)对象。
(2)客户类创建一个适当的命令(Command)对象并且将在步骤(1)创建的接收器对象配置给它。
(3)客户类创建Invoker对象,并且将在步骤(2)中创建的命令对象配置给它。
(4)Invoker对象调用命令对象的execute()方法。

示例

控制空调开关和电灯开关
class Invoker
{
    private Command command;
    public Invoker(Command command){this.command = command;}
    void callCommand(){command.execute();}
}

public interface Command
{
    public abstract void execute();
}

public class AirConditionOnCommand implements Command
{
    private AirCondition ac;
    public setAc(AirCondition ac){...}
    public void execute()
    {
        ac.On();
    }
}

public class AirConditionOffCommand implements Command
{
    private AirCondition ac;
    public setAc(AirCondition ac){...}
    public void execute()
    {
        ac.Off();
    }
}

public class LampOnCommand implements Command
{
    private Lamp ac;
    public setAc(Lamp ac){...}
    public void execute()
    {
        ac.On();
    }
}

public class LampOffCommand implements Command
{
    private Lamp ac;
    public setAc(Lamp ac){...}
    public void execute()
    {
        ac.Off();
    }
}

接受类
class AirCondition
{
    public void On(){}
    public void Off(){}
}
class Lamp
{
    public void On(){}
    public void Off(){}
}

调用
Lamp l = new Lamp();
LampOnCommand lo = new LampOnCommand();
lo.setAc(l);
Invoker invoker1 = new Invoker(lo);
invoker1.callCommand(); 

优点

(1)命令模式可以实现调用者和被调用者之间的解耦。
(2)命令模式容易扩展,上面的程序如果添加控制电视的开关的话,只要添加一个电视的接受类以及一个电视的控制类实体。
(3)命令模式支持将多个命令装配成一个复合命令,复合命令实际上市组合模式的一个实例。
(4)命令模式支持操作的取消与重做。需要对ConcreteCommand进行添加一些状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一夜了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值