设计模式之命令模式-使用命令模式实现遥控器及总结

设计模式之命令模式-使用命令模式实现遥控器及总结

先来看看项目结构:
设计模式之命令模式-使用命令模式实现遥控器及总结

说明:

1:命令接口对象

2:电灯打开或关闭命令

3:音响打开或关闭命令

4:音响音量增加或减少命令

来源:凯哥Java(kaigejava)

电灯开或关代码:

/**

  • Created by kaigejava on 2019/8/30.

  • 关灯的命令对象

*/

public class LightOffCommand implements ICommandInterface{

private LightAPI light;

public LightOffCommand(LightAPI light){

   this.light = light;

}

@Override

public void execute() {

   light.Off();

}

@Override

public void undo() {

   light.On();

}

}

增加音响音量的类:

/**

  • Created by kaigejava on 2019/8/30.

  • 给音响增加音量命令对象

*/

public class StereoAddVolCommand implements ICommandInterface{

private StereoAPI setreo;

public StereoAddVolCommand(StereoAPI stereo){

   this.setreo = stereo;

}

@Override

public void execute() {

   int vol=   setreo.GetVol();

   if(vol<11)

   {

       setreo.AddVolume(++vol);

   }

}

@Override

public void undo() {

   int vol=   setreo.GetVol();

   if(vol>0)

   {

       setreo.downVolume(--vol);

   }

}

}

命令模式总结:

1:内容

什么是命令模式?命令模式定义。参见上一篇

2:角色

invoker:调用者(如遥控器对象)

Command:命令接口或抽象类(如命令案例中命令接口)

received命令具体实现类(如电灯开对象、音响音量加/减对象)

3:执行顺序

调用者-->接收者-->命令

4:使用场景

当行为的请求者与行为的实现者之间需要解耦的时候(如遥控器项目,请求者是遥控器,行动实现者是各个不同的家电设备),这种场景下可以使用

5:何时使用

在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。

6:优缺点

优点:

1、降低了系统耦合度;

2、新的命令可以很容易添加到系统中去。

缺点:

使用命令模式可能会导致某些系统有过多的具体命令类。比如我们遥控器项目中就多了很多具体命令对象。

联系凯哥--》凯哥Java(kaigejava)或凯哥个人博客:www.kaigejava.com 博客上私聊凯哥哦~

7:注意事项

系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作,也可以考虑使用命令模式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值