# 小试牛刀之责任链模式

小试牛刀之责任链模式

 一直想写点东西,但是每次都会“懒癌”发作,只说不做,感觉要在懒癌的世界里了此残生了~~昨天在电影里看到一句话:"作对的事情什么时候都不算迟",所以还是决定做点什么,于自己,于梦想,于生活,毕竟生活不只有眼前的苟且,还有梦想与编程!
 前段时间在整理有关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);
	以上是基本流程,不足之处,虚心接受指导;
- ****

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值