ifelse太多了。最近跟公司老大开发了一个IM系统,类似QQ和微信。是一款聊天软件。我们的部分业务逻辑如下所示。if(msgType="text"){//dosomething}elseif(msgType="picture"){//dossomething}elseif(msgType="video"){//dossomething}else{//dossomething}基于消息不同类型的消息有不同的处理策略。每条消息的处理策略代码很长。如果都放在这个ifelse代码块里面,代码很难维护,也很丑,所以我们一开始就用了策略模式。处理情况。策略模式非常简单。它定义了一个接口,然后有多个实现类,每个实现类封装了一个行为。然后根据不同的条件选择不同的实现类。实现流程消息对象,当然真正的对象没有那么简单,省略了很多属性。@Data@AllArgsConstructorpublicclassMessageInfo{//消息类型privateMsgTypeEnum类型;//消息内容privateStringcontent;}消息类型为枚举类。publicenumMsgTypeEnum{TEXT(1,"文本"),IMAGE(2,"图像"),VIDEO(3,"视频");公共最终int代码;公共最终字符串名称;MsgTypeEnum(intcode,Stringname){this.code=code;this.name=名称;}}定义消息处理策略接口。publicinterfaceMessageStrategy{voidhandleMessage(MessageInfomessageInfo);}有2个消息处理接口,分别处理不同的消息。处理文本消息@Service@MsgTypeHandler(value=MsgTypeEnum.TEXT)publicclassTextMessageStrategyimplementsMessageStrategy{@OverridepublicvoidhandleMessage(MessageInfomessageInfo){System.out.println("处理文本消息"+messageInfo.getContent());}}处理图片消息;@Service@MsgTypeHandler(value=MsgTypeEnum.IMAGE)publicclassImageMes??sageStrategyimplementsMessageStrategy{@OverridepublicvoidhandleMessage(MessageInfomessageInfo){System.out.println("处理图像消息"+messageInfo.getContent());}}上面可以看到我们用了一个MsgTypeHandler注解来表示策略类用来处理什么样的消息?@Documented@Inherited@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public@interfaceMsgTypeHandler{MsgTypeEnumvalue();}至此,所有代码都写完了,我们来运行测试代码;@RunWith(SpringRunner.class)@SpringBootTestpublicclassDemoApplicationTests{privateMap
