Mina之责任链模式实现

数据结构

DefaultIoFilterChain

  • EntryImpl head;
  • EntryImpl tail;

Mina的责任链数据结构主要是一个双向链表,链表项为Entry的实现EntryImpl,DefaultIoFilterChain中保存了链表的head和tail。

EntryImpl

  • IoFilter filter;
  • EntryImpl prevEntry;
  • EntryImpl nextEntry;
  • NextFilter nextFilter;

EntryImpl是IoFilter的包装,还提供了前后节点的链接。需要关注的是NextFilter类,由于责任链的两端都可能触发事件,不同事件在链中的传递方向不同,所以IoFilter的实现需要根据不同的事件来判断下一个需要接收事件的Entry是在哪个方向,而Nextfilter正是将这部分逻辑从filter中分离出来,Nextfilter中包含了双向链表中两个方向所有可能发生的事件类型,这样IoFilter只需要根据不同事件调用NextFilter中不同方法即可。

IoFilter

IoFilter是责任链模型中的每个节点主要代码需要实现的接口,包含messageReceive、messageSent等方法。

方向

  • write: tail -> head、previous
  • receive: head -> tail、next

机制