Java23种设计模式——15.行为型模式之命令模式

Java中除去有设计原则之外,还有23中设计模式。

这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题。

并且在这些模式中,可以说是将语言的使用体现的淋漓尽致。

那我们今天要学习  行为型模式  中的  命令模式  !

命令模式

先来百科一下,什么叫命令模式

百科很简单的就介绍完了,它就是以物件代替行动,具体怎么理解,我们举个生活中的小例子

你用键盘去按字母打字就是属于命令模式,它是使用键盘去代表你的操作(输入文字)

命令模式的定义与特点

命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。

这个其实就是由物件去实现我们想要的功能

命令模式的主要优点如下。

1. 降低系统的耦合度。命令模式能将调用操作的对象与实现该操作的对象解耦。

2. 增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,它满足“开闭原则”,对扩展比较灵活。


其缺点是:可能产生大量具体命令类。因为计对每一个具体操作都需要设计一个具体命令类,这将增加系统的复杂性。

命令模式的结构与实现

先说一下命令模式中我们要用到的一些角色

1. 抽象命令类角色:声明执行命令的接口,拥有执行命令的抽象方法 execute()。

2. 具体命令角色:是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。

3. 实现者/接收者角色:执行命令功能的相关操作,是具体命令对象业务的真正实现者。

4. 调用者/请求者角色:是请求的发送者,它通常拥有很多的命令对象,并通过访问命令对象来执行相关请求,它不直接访问接收者。

大概知道了这些角色,我们就可以用这去模拟一下我们上面的键盘输入问题的这个事情了

第一步:

我们先定义一下抽象命令类角色,这个只有一个抽象方法,那就是 execute()

第二步:

有了抽象命令还不行,我们还需要有具体的执行,这个就是我们以后要扩展的类,因为键盘上有那么多字母,我们只需要一个一个实现即可

当然,只有这个是没有用的,我们还需要一个接受者,这个是用来最后做操作的,如果不懂可以再看一下上面的角色定义

然后我们回到 LetterA 这类,将接受者定义到里面去

第三步:

最后,我们再去定义一个调用者,这个其实就是我们人了,然后去按键盘

当然,这里我们可以不去使用构造函数,我们可以弄一个 get/set 方法,动态的赋值

测试:

我们弄一个测试类,测试一下

执行一下

大家可以把刚刚的指令的调用者修改成 get/set 的方式,动态的注入 Letter ,这样就可以省去创建对象了。

OK,就到这里,大家好好看一下。多多练习。有问题可以联系我QQ:2100363119

欢迎大家访问我的个人网站:lemon1234.com 感谢大家留言

猜你喜欢

转载自blog.csdn.net/weixin_45908370/article/details/109329323