# 小试牛刀之责任链模式

来源:互联网 发布:app牛机器人软件 编辑:程序博客网 时间:2024/06/05 23:08

小试牛刀之责任链模式

 一直想写点东西,但是每次都会“懒癌”发作,只说不做,感觉要在懒癌的世界里了此残生了~~昨天在电影里看到一句话:"作对的事情什么时候都不算迟",所以还是决定做点什么,于自己,于梦想,于生活,毕竟生活不只有眼前的苟且,还有梦想与编程! 前段时间在整理有关IM消息接收处理的部分代码时,发现以前使用的环信代码规范性和可读性,包括设计上面都很差,想要去好好整理,却又没有什么好的思路,与老大沟通后,了解到责任链设计模式的优越性,于是马不停蹄的整理完代码,赶紧做一总结,分享请教~~废话不多说,切入正题,直接撸代码,这里以和女朋友的一天为例(当然,在下只是个宅男单身狗!~!)。
  • 定义接口
    第一步定义接口:
    /**
    • Created by Grenaderose on 2017/11/3.
    • 与女朋友一天的事项处理器
    • @author Grenaderose grenaderose0817@outlook.com
      */
      public interface IWithGFOneDayEventHandle {
      /**
      • 和女朋友一天要做的事的处理方法
      • @param event 和女朋友一天要做的事件对象
        */
        void handleEvent(EventWithGF event);
        }
  • 实现具体的事情
    这个是有我们先想好要干嘛!!~~~
    定义我们的事件对象
    /**
    • 和女朋友一天要做的
      */
      public class EventWithGF{
      //事件类型
      private int eventType;
      /获取事件类型的get方法/
      public int getEventType() {
      return eventType;
      }
      /设置事件类型的set方法/
      public void setEventType(int eventType) {
      this.eventType = eventType;
      }
      }
  • 事件的类型宏定义
    /**

    • 和女朋友一天要做的事的具体类型
      */
      public class EventType{
      //事件类型
      //出去兜风(当然你得有辆车,共享单车不能算啊)
      public static final int EVENT_GO_FOR_A_DRIVE=1;
      //吃午饭(不要叫外卖啊,要不然你会和我一样的~~)
      public static final int EVENT_HAVE_LUNCH=2;
      //看电影(提前买好票,问好人家喜欢看什么,别TM到了才问,这就尴尬了。。)
      public static final int EVENT_SEE_A_MOVIE=3;
      //休息休息(兄弟,你懂我意思吧)
      public static final int EVENT_GO_TO_SLEEP=4;
      }
      *不同事件的处理器
      /**
      • Created by Grenaderose on 2017/11/3.
      • 兜风事件的处理器
      • @author Grenaderose grenaderose0817@outlook.com
        */
        public class GoForADriveHandle implements IWithGFOneDayEventHandle {
        @Override
        public void handleMsg(EventWithGF eventWithGF) {
        int type= eventWithGF.getEventType();
        switch (type){
        case EventType.EVENT_GO_FOR_A_DRIVE:{
        //todo 去兜风
        break;
        }
        default:{
        break;
        }
        }
        }
        /**
      • Created by Grenaderose on 2017/11/3.
      • 吃午饭事件的处理器
      • @author Grenaderose grenaderose0817@outlook.com
        */
        public class HaveLunchHandle implements IWithGFOneDayEventHandle {
        @Override
        public void handleMsg(EventWithGF) {
        int type= eventWithGF.getEventType();
        switch (type){
        case EventType.EVENT_HAVE_LUNCH:{
        //todo 共享午餐
        break;
        }
        default:{
        break;
        }
        }
        }
        /**
      • Created by Grenaderose on 2017/11/3.
      • 看电影事件的处理器
      • @author Grenaderose grenaderose0817@outlook.com
        */
        public class SeeAMovieHandle implements IWithGFOneDayEventHandle {
        @Override
        public void handleMsg(EventWithGF e) {
        int type= eventWithGF.getEventType();
        switch (type){
        case EventType.EVENT_SEE_A_MOVIE:{
        //todo 去看电影
        break;
        }
        default:{
        break;
        }
        }
        }
        /**
      • Created by Grenaderose on 2017/11/3.
        *休息事件的处理器
      • @author Grenaderose grenaderose0817@outlook.com
        */
        public class GoToSleepHandle implements IWithGFOneDayEventHandle {
        @Override
        public void handleMsg(EventWithGF) {
        int type= eventWithGF.getEventType();
        switch (type){
        case EventType.EVENT_GO_TO_SLEEP:{
        //todo 去休息
        break;
        }
        default:{
        break;
        }
        }
        }
  • *简单工厂模式对事件进行处理封装
    /**

    • Created by Grenaderose on 2017/11/3.
    • 管理消息处理器的工厂
    • @author Grenaderose grenaderose0817@outlook.com
      */

public class WithGFOneDayEventHandleFactory {

/*对象单例*/private static volatile WithGFOneDayEventHandleFactory instance;/** * 向外提供获取实例的公共方法 */public static WithGFOneDayEventHandleFactory getInstance() {    if (instance == null) {        synchronized (WithGFOneDayEventHandleFactory .class) {            if (instance == null) {                instance = new WithGFOneDayEventHandleFactory ();            }        }    }    return instance;}/** * 私有构造 */private WithGFOneDayEventHandleFactory () {    //初始化工厂配置    this.handleList = new LinkedList<IWithGFOneDayEventHandle>();    this.initWithGFOneDayEventHandleFactory ();}/*存储处理器的集合*/private LinkedList<IWithGFOneDayEventHandle> handleList;/** * 初始化处理器的工厂 */private void initWithGFOneDayEventHandleFactory () {    //创建处理器对象    //兜风事件的处理器    GoForADriveHandle goForADriveHandle = new GoForADriveHandle ();    //吃饭事件的处理器    HaveLunchHandle haveLunchHandle= new HaveLunchHandle ();    //看电影事件的处理器    SeeAMovieHandle seeAMovieHandle =new SeeAMovieHandle ();    //休息事件的处理器    GoToSleepHandle goToSleepHandle =new GoToSleepHandle ();    //将所有初始化完毕的管理器对象维护进管理器存储集合    this.handleList.add(goForADriveHandle );    this.handleList.add(haveLunchHandle);    this.handleList.add(seeAMovieHandle );    this.handleList.add(goToSleepHandle );}/** *事件到来时的链式管理 * @param eventWithGF 事件对象 */public void handleMsg(EventWithGF eventWithGF) {    for (IWithGFOneDayEventHandle implHandle : this.handleList) {        implHandle .handleEvent(eventWithGF);    }}

}
- 每当事件来临时我们只需要调用
WithGFOneDayEventHandleFactory .getInstance().handleMsg(eventWithGF);
以上是基本流程,不足之处,虚心接受指导;
- **

原创粉丝点击