少年意气强不羁,虎胁插翼白日飞。这篇文章主要讲述设计模式与Android责任链模式——曹瞒兵败走华容相关的知识,希望能为你提供帮助。
什么是责任链模式
所谓责任链模式,就是使多个对象都有机会处理请求,并讲这些对象连成一条链,沿着这条链传递请求直到有对象处理请求为止的设计模式。责任链模式可以避免请求的发送者和接收者之间的耦合关系。
责任链模式的实现方式
熟悉我的人都知道我对华容道游戏情有独钟,2014年用AndEngine实现了一个华容道交了毕业设计,2015年用OGEngine参赛中了一部手机……我每年都要用不同的新技术实现一遍华容道。华容道的背景故事请见《三国演义》第五十回。
这次我拿华容道给大家讲解一遍责任链模式,首先定义一个抽象的将军类:
public abstract class General { protected General nextGeneral; /** * 姓名 */ public abstract String getName(); /** * 武力 */ public abstract int getForce(); /** * 拦截曹操 * @param force 曹操手下将军能拿出来的最高武力 */ public final void tryCaoCao(int force){ if (force < = getForce()){ catchCaoCao(); }else{ if (nextGeneral != null){ nextGeneral.tryCaoCao(force); } } } /** * 有能力抓获曹操 */ public void catchCaoCao(){ Log.e("曹操无路可逃","曹操兵败走华容,正与" + getName() + "狭路逢。只为当初恩义重,放开金锁走蛟龙。"); } } |
赵云:
public class ZhaoYun extends General { @Override public String getName() { return "赵云"; } @Override public int getForce() { return 95; } } |
张飞:
public class ZhangFei extends General { @Override public String getName() { return "张飞"; } @Override public int getForce() { return 97; } } |
关羽:
public class GuanYu extends General { @Override public String getName() { return "关羽"; } @Override public int getForce() { return 100; } } |
曹操走华容道:
ZhaoYun zhaoYun = new ZhaoYun();
ZhangFei zhangFei = new ZhangFei(); GuanYu guanYu = new GuanYu(); zhaoYun.nextGeneral = zhangFei; zhangFei.nextGeneral = guanYu; zhaoYun.tryCaoCao(99); |
你可以试试,输出结果和《三国演义》的剧情是否一致。
android源码中的责任链模式
(1)如果你读完上文的代码之后,没有想到ViewGroup事件的分发处理机制,那么你不适合学习设计模式,还是先补充补充基础知识吧。
Android开发中如何利用责任链模式
(1)责任链模式可以对请求者和处理者关系解耦,提高代码的灵活性。Broadcast可以分为异步的Normal Broadcast和根据优先级依次传播的Ordered Broadcast(有序广播)两种,有序广播根据优先级依次传播,直到有接收者将其终止或所有接收者都不中止它,这是典型的责任链模式。
需要注意的几个问题
(1)责任链模式的最大缺点在于其对链中请求处理者的遍历,如果处理者层级太多,尤其是在递归调用中,责任链模式非常影响性能。
【设计模式与Android责任链模式——曹瞒兵败走华容】本文出自 “玖哥的书房” 博客,请务必保留此出处http://dongfeng9ge.blog.51cto.com/9191243/1973068
推荐阅读
- 判断手机是否安装某app,有就打开,没有就去下载
- popwindow在安卓7.0手机 显示错位的处理
- Android CameraManager 类
- Auto updater for my side loaded UWP apps
- 5+ App开发入门指南
- APP 自动化测试封装结构模式
- Android studio安装配置
- 内存测试——Android Studio中对应进程的Heap
- Spring和mybatis整合 org.mybatis.spring.mapper.MapperScannerConfigurer