Java中除去有设计原则之外,还有23中设计模式。
这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题。
并且在这些模式中,可以说是将语言的使用体现的淋漓尽致。
那我们今天要学习 行为型模式 中的 命令模式 !
命令模式
先来百科一下,什么叫命令模式
百科很简单的就介绍完了,它就是以物件代替行动,具体怎么理解,我们举个生活中的小例子
你用键盘去按字母打字就是属于命令模式,它是使用键盘去代表你的操作(输入文字)
命令模式的定义与特点
命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。
这个其实就是由物件去实现我们想要的功能
命令模式的主要优点如下。
1. 降低系统的耦合度。命令模式能将调用操作的对象与实现该操作的对象解耦。
2. 增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,它满足“开闭原则”,对扩展比较灵活。
其缺点是:可能产生大量具体命令类。因为计对每一个具体操作都需要设计一个具体命令类,这将增加系统的复杂性。
命令模式的结构与实现
先说一下命令模式中我们要用到的一些角色
1. 抽象命令类角色:声明执行命令的接口,拥有执行命令的抽象方法 execute()。
2. 具体命令角色:是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。
3. 实现者/接收者角色:执行命令功能的相关操作,是具体命令对象业务的真正实现者。
4. 调用者/请求者角色:是请求的发送者,它通常拥有很多的命令对象,并通过访问命令对象来执行相关请求,它不直接访问接收者。
大概知道了这些角色,我们就可以用这去模拟一下我们上面的键盘输入问题的这个事情了
第一步:
我们先定义一下抽象命令类角色,这个只有一个抽象方法,那就是 execute()
、
第二步:
有了抽象命令还不行,我们还需要有具体的执行,这个就是我们以后要扩展的类,因为键盘上有那么多字母,我们只需要一个一个实现即可
当然,只有这个是没有用的,我们还需要一个接受者,这个是用来最后做操作的,如果不懂可以再看一下上面的角色定义
然后我们回到 LetterA 这类,将接受者定义到里面去
第三步:
最后,我们再去定义一个调用者,这个其实就是我们人了,然后去按键盘
当然,这里我们可以不去使用构造函数,我们可以弄一个 get/set 方法,动态的赋值
测试:
我们弄一个测试类,测试一下
执行一下
大家可以把刚刚的指令的调用者修改成 get/set 的方式,动态的注入 Letter ,这样就可以省去创建对象了。
OK,就到这里,大家好好看一下。多多练习。有问题可以联系我QQ:2100363119
欢迎大家访问我的个人网站:lemon1234.com 感谢大家留言