java设计模式——命令模式

2019-11-11  本文已影响0人  Erichc

1.命令模式概述

所谓的命令就是如:将军命令士兵进攻,老师命令学生上课要坐好,我们可以将命令这个过程进行解析。一个是发起命令的人,称为发送者,

一个称谓收到命令的人称为接收者,还有一个为命令本身,称为传递者。

2.命令模式的实现

拿我们生活中最接近的事例开关与电灯为例。当我们按下开关,灯会根据开关变暗或变亮。我们先按一开始我们最能想到的方式进行编写。

首先一个开关类和一个灯光类。如下图所示:

为灯光类抽象出一个电器,电器都有开和关的操作,开关关联电灯,用户操作电灯就会改变电灯的状态。

如果按照最普通的方法进行设计的话,开关与灯光会强耦合在一起不利于进行扩展,我们的电器不只灯光,开关也远不知有开关功能,当我们引入

电视、空调等。就得修改原有的类,新增电视、空调强耦合在开关类里面,并且开关得不停的新增新的方法,这样不停的修改也会隐藏更多的bug。

我们如何将他们的耦合进行分离?这就引入了我们的命令模式。

1.将开关当作发送者,将灯光、电视当作接收者。

2.我们将引入一个中间类叫做命令类。将发送的指令当成一个命令。让命令告诉给接收者要去做什么,接收者收到后做出对应的反应。

3.我们对这些类进行抽象。

这就是我们抽象出来的一个UML类图。接下去我们看看对应具体类是如何编写的。

这样的话我们就把发送者和接收者分离开来,发送者只管发送不用关心发送给谁,接收者只管收到消息要要去做什么操作。

我们现在有遥控器 有电视,遥控器上开关电视的按钮和调节音量的按钮,如果我们要对其进行扩展,新增一个调节频道的按钮,我们只需新增一个调节频道的命令类,在遥控器上多2个按钮即可,让调节频道命令类去通知电视该换频道了。

命令模式的缺点也是显而易见的,就是如果随着遥控器功能不断的强大,需要的命令就会越来越多,命令类就会创建很多,这是无法避免的。

上一篇下一篇

猜你喜欢

热点阅读