项目中需要对不同类型的消息进行不同的处理,这个也是也最常见的订单创建问题是一致的。
最初级的办法就是使用 if…else 或者 switch 来实现逻辑,但是后面类型越来越多的时候,if…else 就显得有些过于臃肿也不易于维护了。最主要的可能就是不能体现实现者的技术能力。所以此时就需要使用策略模式来装一装了。
基础接口定义
策略模式最关键的一点就是所有的实现类都要实现同一个接口。
1 | package com.gugu.boy.spring.websocket.handler.processor; |
注解定义
定义注解,通过注解上的类型,来使实现类支持对应类型的消息处理。
1 | package com.gugu.boy.spring.websocket.handler.processor; |
实现类的定义
1 | 4j |
1 | 4j |
Context 实现
Context 的目的在于在程序启动的时候,将所有带有注解ProcessorSupport的PayloadProcessor类型的实例管理起来,通过ProcessorSupport的 type 支持的类型,快速定位到对应的实例上,从而实现对应的逻辑。
1 | package com.gugu.boy.spring.websocket.handler; |
使用方法
使用方法很简单的了,只需要将消息中的 type 属性拿到,通过PayloadProcessorContext.getInstance()即可以获取到PayloadProcessor.process()方法去实现就行了,是不是比if...else高大上美观?
1 | public synchronized void sendMessage(MessagePayload payload) { |