有趣的设计——注解形式实现策略模式
作者:星晴(当地小有名气,小到只有自己知道的杰伦粉)
地点科兴园,时间晚上10点,深圳的深夜还是挺舒服的,办公室外面还是灯火通明,感觉大家都为了理想奋斗。不过内心有点小受伤,因为公司又开始欠薪水了。哎!!!
现在回想一下公司的项目,看看自己写的代码,发现一个不错的设计——注解形式实现策略模式
策略模式UML

生成代码就不展示了,通过一个Demo来看看
应用场景:我们经常会遇到不同情况区别对待,比如根据不同的订单来源或者支付方式不同来处理不同逻辑,如何能做到设计的可扩展性呢?有一定的经验我们自然会想到策略模式设计,策略模式是一种设计,实现自然有很多种,如何更具有观赏性,这个就需要慢慢摸索。这里就分享一个注解形式实现策略模式
1.创建Order类

说明:我们会根据订单来源不同,支付方式不同进行逻辑处理
2.创建OrderHandlerType 元注解接口

说明:OrderHandlerType 元注解接口,这里标注来源和支付方式;这里有一个很有意思的事情,很多人不知道@interface其实是一个接口,如果有看过对于元注解接口的注释,你会发现有一句 @interface本质是一个接口,那我们可以通过实现来做一些逻辑
3.创建OrderHandlerTypeImpl 实现OrderHandlerType


说明:大家有看到这里为什么要 重写 hashCode和equals,而且重写规则不一样吗?其实元注解反射获取实现类,是通过动态代理实现的,动态代理每次创建的类都是不一样的,只有保证hashCode和equals才能保证source和payMethod一样对应的OrderHandlerType的实现类是同一个
3.创建OrderHandler接口

说明:订单处理类接口
4.创建PCAliPayOrderHandler实现OrderHandler

说明:来源PC,支付宝支付 订单处理类
5.创建PCWechartOrderHandler实现OrderHandler

说明:来源PC,微信支付 订单处理类
6.创建OrderService 类

说明:setOrderHandlerMap(List orderHandlers); 这里是保存被OrderHandlerType注解的类,然后放入Map中,key为具体某个元注解接口,value为对应的订单处理类
7.测试

---------------------------------------------以上就是完整的注解形式的策略模式------------------------------------------------------------
感谢:项目中其实我们可能用到的设计模式其实并不会太多,可能更多的框架源码会比较多,毕竟绝大部分的项目都没有太多复杂的业务,当然也有很多人为了设计去做设计,其实有时候代码就很难去阅读的,分散太开就会导致业务逻辑很难理解。所以我觉得有一句话说的好,对已知的需求进行充分设计,不要一直考虑未来的设计,这样我觉得是一个系统才能做好,并且符合互联网公司发展的规划,一开始就很高大上,会有巨大的成本,所以还是实事求是去看待系统设计。
关注公众号,有更多好玩的等着你!!!