设计模式之命令模式,使用命令模式实现遥控器及总结
先来看看项目结构:
说明:
1:命令接口对象
2:电灯打开或关闭命令
3:音响打开或关闭命令
4:音响音量增加或减少命令
凯哥Java (kaigejava)
电灯开或关代码:
/* *
-
<李>
由kaigejava 2019/8/30。
李> <李>关灯的命令对象李>*/公共类LightOffCommand实现ICommandInterface {
私人LightAPI光;
公共LightOffCommand (LightAPI光){
<代码>。光=,代码>
}
@Override
公共空execute () {
<代码> light.Off(); 代码>
}
@Override
公共空undo () {
<代码> light.On(); 代码>
}
}
增加音响音量的类:
/* *
-
<李>
由kaigejava 2019/8/30。
李> <李>给音响增加音量命令对象李>*/公共类StereoAddVolCommand实现ICommandInterface {
私人StereoAPI setreo;
公共StereoAddVolCommand (StereoAPI立体声){
<代码>。setreo=音响;代码>
}
@Override
公共空execute () {
<代码> int卷=setreo.GetVol (); 如果(vol<11) { setreo.AddVolume(+ +卷); }代码>
}
@Override
公共空undo () {
<代码> int卷=setreo.GetVol (); 如果(vol> 0) { setreo.downVolume(卷); }代码>
}
}
命令模式总结:
1:内容
什么是命令模式?命令模式定义。参见上一篇
2:角色
调用程序:调用者(如遥控器对象)
命令:命令接口或抽象类(如命令案例中命令接口)
收到命令具体实现类(如电灯开对象,音响音量加/减对象)
3:执行顺序
调用者——在接收者——在命令
4:使用场景
当行为的请求者与行为的实现者之间需要解耦的时候(如遥控器项目,请求者是遥控器,行动实现者是各个不同的家电设备),这种场景下可以使用
5:何时使用
在某些场合,比如要对行为进行“记录,撤销/重做,事务“等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者“解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。在某些场合,比如要对行为进行“记录,撤销/重做,事务“等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者“解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。
6:优缺点
优点:
1,降低了系统耦合度;
2,新的命令可以很容易添加到系统中去。
缺点:
使用命令模式可能会导致某些系统有过多的具体命令类。比如我们遥控器项目中就多了很多具体命令对象。
联系凯哥——》凯哥Java (kaigejava)或凯哥个人博客:www.kaigejava.com博客上私聊凯哥哦~
7:注意事项
系统需要支持命令的撤销(撤销)操作和恢复(重做)操作,也可以考虑使用命令模式