java设计模式——命令模式

1.命令模式概述

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

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

2.命令模式的实现

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

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


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

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

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

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

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

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

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


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


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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤...
    GaaraZ阅读 474评论 0 1
  • 定义 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或者交易(Transaction)模式。 ...
    步积阅读 14,036评论 2 13
  • 命令模式:属于行为型模式。命令模式,将一个请求封装成一个对象,使你可以用不同的请求对客户进行参数化;对请求排队或记...
    yiqiquhuxi阅读 738评论 0 4
  • 前提 介绍这么模式之前,我们首先来看看它的类图。 根据这个图我们来分析一下何为命令模式。首先就是我们的 Clien...
    ghwaphon阅读 1,366评论 0 2
  • 即使是被上帝遗忘的孩子 也来自天堂 谁也不应自卑 谁也不应自弃
    七源禾页阅读 242评论 0 1