设计模式之命令模式-使用命令模式实现遥控器及总结
- 设计模式
- 时间:2019-08-30 09:24
- 3921人已阅读
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
设计模式之命令模式-使用命令模式实现遥控器及总结
先来看看项目结构:
说明:
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、新的命令可以很容易添加到系统中去。
缺点:
使用命令模式可能会导致某些系统有过多的具体命令类。比如我们遥控器项目中就多了很多具体命令对象。
7:注意事项
系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作,也可以考虑使用命令模式