1. 责任链模式介绍
责任链模式是行为型设计模式之一。将每个节点看做是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止。
使多个对象都有机会处理请求,从而避免了请求的发送者和接受者间的耦合关系。
个人理解,和Android中的View事件处理机制类似
2. 责任链模式的使用场景
(1) 多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定
(2) 在请求处理者不明确的情况下向多个对象中的一个提交一个请求
(3) 需要动态指定一组对象处理请求
3. 责任链模式实例
Android中有两种广播,一种是Normal Braodcast普通广播,一种是Ordered Broadcast有序广播,普通广播是异步的,发出时可以被所有的接收者知道;而有序广播则是根据优先级依次传播的,直到有接收者将其终止或所有接收者都不终止它。有序广播的这一特性与责任链模式很接近。
public class FirstReceiver extends BroadcastReceiver { @Override public void onReceiver(Context context, Intent intent) { int limit = intent.getIntExtra("limit", -1001); if (limit == 1000) { Toast.makeText(context, "First", Toast.LENGTH_SHORT).show(); // 终止广播 abortBroadcast(); } else { // 不处理广播,广播继续发送给下一个接收者 } }}public class SecondReceiver extends BroadcastReceiver { @Override public void onReceiver(Context context, Intent intent) { int limit = intent.getIntExtra("limit", -1001); if (limit == 100) { Toast.makeText(context, "Second", Toast.LENGTH_SHORT).show(); // 终止广播 abortBroadcast(); } else { // 不处理广播,广播继续发送给下一个接收者 } }}public class ThirdReceiver extends BroadcastReceiver { @Override public void onReceiver(Context context, Intent intent) { int limit = intent.getIntExtra("limit", -1001); if (limit == 10) { Toast.makeText(context, "Third", Toast.LENGTH_SHORT).show(); // 终止广播 abortBroadcast(); } else { // 不处理广播,广播继续发送给下一个接收者 } }}