对象职责分离
给对象定职责,有几种好处
1.将复杂降级达到分而治之,每个对象集中实现相应功能,修改时不会影响其它对象,这叫解偶
2.职责分工明确,知道那些功能做了用不上,那些是可以不用公开使用,这叫黑箱操作
一般从使用者角度去规分对象职责
QPacket 对象是定在系统层 作用与底层通信框架交互
我们先以几个引导来加强上几节课学的知识
代码1
1 public class QPacket { 2 /** 操作代码 **/ 3 private String c; 4 /** 内容 **/ 5 private Object b; 6 }
给另一台计算机发指令工作,最起码有两个基础参数 1.操作代码 2.执行内容
如果还有点印象,计算机只识别二进制,不识别明文的,所以进一步引导
代码2
1 public class QPacket { 2 3 /** 操作代码 **/ 4 private short c; 5 /** 内容 **/ 6 private byte[] b; 7 }
上节课讲的,先确认数值范围再考虑用占多少bits
操作代码,一个项目操作指令不会超过上万 而short范围之间 -32768 至 32767 如果你的指令超过范围可考虑int类型
至于内容是不确定的用byte数组代替
为什么要引导?大多数从事web开发是没有二进制转换思维
QPacket最终结构
1 public class QPacket { 2 3 /** 序号 用于包ID,解决幂等 **/ 4 private long sn; 5 /** sessionId **/ 6 private long sid; 7 /** opCode **/ 8 private short c; 9 /** 内容 **/ 10 private byte[] b; 11 }
源码解读
sid是会话标识,如果每秒产生10W个会话,N天才轮回一次,用long可以防破坏
sn包标识,常用于业务上消息失丢,重复过滤处理