Design Pattern 之 命令模式

命令模式:对命令进行封装,将发出命令的责任和执行命令的责任分割开

根据面向接口编程的原则,首先要有一个命令的接口类


所有的具体命令都继承ICommand接口,并实现它的execute()方法,这样的话我们只是针对ICommand进行编程,不用考虑具体的实现了。

还是用哪个遥控器的例子吧,遥控器上有两组按钮,一组是控制电视开和关,另一组是控制空调开和关。这样的话,遥控器就是命令发出者,电视和空调就是命令执行者,将这两者解耦就是命令模式要做的事情。

接下来就是将电视和空调的命令封装成类,并继承ICommand,实现execute方法


TVCommand和AirConditonerCommand是电视和空调的命令类,它们继承ICommand

TVManager和AirConditionerManager是电视和空调的控制类,这里面是功能的具体实现


都目前,我们关于电视和空调的命令类都完成了,接下来就是遥控器的类了



遥控器类有一个私有vector来保存那个slot对应那个command,一个push方法将命令加入到遥控器中,一个回调方法onPress,在遥控器按钮被按下时调用,下面是类图:




代码示例:

public interface ICommand
{
public void execute(boolean isOn);
}


//电视机的command
public class TVCommand implements ICommand
{
@Override
public void execute(boolean isOn)
{
TVManager manager = new TVManager();

if (isOn)
{
manager.setOn();
} else
{
manager.setOff();
}
}
}

//空调的command
public class AirConditionerCommand implements ICommand
{
@Override
public void execute(boolean isOn)
{
AirConditionerManager manager = new AirConditionerManager();

if (isOn)
{
manager.setOn();
} else
{
manager.setOff();
}
}
}


//遥控器的实现
public class RemoteControl
{
private Vector<ICommand> vtrCommand;

public RemoteControl(int size)
{
vtrCommand = new Vector<ICommand>();
vtrCommand.setSize(size);
}

public void push(int slot , ICommand command)
{
vtrCommand.set(slot, command);
}

public void onPress(int slot , boolean isOn)
{
vtrCommand.get(slot).execute(isOn);
}
}


//电视机厂商功能实现
public class TVManager
{
public void setOn()
{
System.out.println("TV is On..");
}

public void setOff()
{
System.out.println("TV is Off..");
}
}

//空调厂商功能实现
public class AirConditionerManager
{
public void setOn()
{
System.out.println("AirConditioner is On..");
}

public void setOff()
{
System.out.println("AirConditioner is Off..");
}
}


//具体执行。。。。。
public static void main(String[] args)
{
System.out.println("command");
RemoteControl control = new RemoteControl(2);

control.push(0, new TVCommand());
control.push(1, new AirConditionerCommand());

control.onPress(0, true);
control.onPress(0, false);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

啸鸢

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

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

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

打赏作者

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

抵扣说明:

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

余额充值