重构实现Command模式
一个简单的场景
描述
请求者发送请求,接受者接收请求,并作出响应,这有点类似于Web中的get和post等请求。一般,我们会使用条件判断语句来处理请求,if请求类型为这个,就执行这个方法,else if请求类型为那个,就执行那个方法,这种做法的一大优点是简单、直观。
使用条件语句处理可能带来的问题
- 当处理请求的种类太多时,需要使用大量的if else语句,这时候代码的简单性完全丧失了,变得难以理解、阅读。这时候处理类已经变得十分庞大,我们更倾向于使用小对象、小方法。
- 缺少灵活性,不支持客户端动态添加、移除处理器。类似于addHandler、removeHandler、setHander等方法。
重构到Command模式
- 若某一个请求的处理逻辑没有封装到一个方法中,那么提炼方法。
- 再将提炼出来的方法提炼出一个类,将原方法所需的参数传入新类,或将原方法所在的类传入新类中。提炼出来的类就是一个处理器,新类应该以Handler后缀命名,并为处理器的公共处理方法重新命名为execute、run或其他的。
- 重复提炼类,将所有的处理逻辑提炼出。
- 观察所有的处理器是否有重复代码,若有则可以使用模板方法来消除重复代码。
- 为所有的处理器类建立一个公共的接口,提供统一的执行方法。Handler类是将Command与处理逻辑放在一起了,也可以分开,将Command的方法委托给逻辑处理类的方法。
- 将原先封装条件语句的类改为调用Handler来处理请求。可以在该类中新建一个Handler的集合,通过集合来获取handler,提供add和remove方法来实现动态修改。