# 小试牛刀之责任链模式
来源:互联网 发布: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);
以上是基本流程,不足之处,虚心接受指导;
- **
阅读全文
0 0
- # 小试牛刀之责任链模式
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之【责任链】
- java之责任链模式
- GOF之责任链模式
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之责任链
- Java模式开发之责任链模式
- 十 设计模式之责任链模式
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 软件设计模式之(一)责任链模式
- 设计模式之责任链模式
- 【设计模式】之责任链模式
- java设计模式之责任链模式
- 设计模式之(责任链模式)
- html中data-uri和data-href的属性有什么作用
- [新手教程] 微信小程序 轮播图 swiper图片组件
- ros launch 文件的编写
- c# 读取文档
- NOIP2009 T3最优贸易
- # 小试牛刀之责任链模式
- 虚函数与多态需要注意的地方
- 2017 CCPC- 杭州站总结!
- Linux 下 MongoDB 安装使用
- 干货满满,Android热修复方案介绍
- java两大数据类型
- Android使用service重启APP的方法
- Lucene实现简单的全文检索
- 简单的登陆确认有无此用户的ajax代码