比你想象中还要强大的枚举类型---案例篇

前几天写了一篇介绍枚举功能强大的文章。有几个朋友给我指正说,没有案例单纯描述不够直观。确实啊,在这里我就在写一个案例篇,对上次的文章做补充说明。

  此案例是一个游戏服务器的消息识别器的简化。做过游戏开发都知道,客户端和服务器之间的交互需要定义很多的消息类型,而且这个消息类型是需要不断扩展的。消息识别器就是根据客户端发送过来的消息编码封装成消息实体对象,以供业务逻辑层处理。这里就用这个简化后的消息识别器展示一下枚举的一个应用。(此处主要用作枚举的一个应用实例演示,由于代码做了简化处理,设计上难免会有些不当之处,请见谅)

  消息实体类的一个接口:

  消息实体类的一个抽象类:

  消息实体的一个实现类:

  为了模块化管理,对枚举类型抽出了一个接口,以后一个模块的消息可以注册到一个枚举类上,而这些枚举类都实现此接口

  这是枚举类,可以一个模块一个枚举类,该模块下的消息都注册到该枚举类下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public  enum  MsgCodeClassConstants implements  IMsgCodeClass{
     test( 1001 ,TestMsg. class ) //在此就不多罗列一些了
     ;
 
     private  int  msgCode;
     private  Class<? extends  AbstractMsg> msgClass;
     
     MsgCodeClassConstants( int  msgCode,Class<? extends  AbstractMsg> msgClass){
         this .msgCode = msgCode;
         this .msgClass = msgClass;
     }
     
     @Override
     public  int  getMsgCode() {
         return  msgCode;
     }
 
     @Override
     public  Class<? extends  AbstractMsg> getMsgClass() {
         return  msgClass;
     }
 
}

  最后是消息识别器类:

  消息识别器往往用在解码器里,解码器接收到数据后首先读取消息编码,然后根据编码调用识别器获取消息实体对象,调用消息实体对象的readData方法把客户端数据独到消息实体对象中。

  以后要扩展消息时,只需要编写消息实体类,然后注册到枚举类中就可以了。:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值