Android|Android 架构师4 设计模式之责任链模式

前言

责任链模式使多个对象都有机会可以处理请求,从而避免了请求的发送者和接收者的耦合关系,将这些对象形成一条链,并沿着这条链传递该请求。
需求 某公司接收游戏产品反馈回来的邮件有四类:其一,粉丝寄来的邮件,他们喜欢这个游戏;其二,父母寄来的邮件,抱怨他们的孩子沉迷于这个游戏;其三,店家寄来的邮件,想要一起合作推广;其四,垃圾邮件。公司接收到某个邮件,需要分这四种情况去处理,处理顺序可以随意指定。
责任链模式 Android|Android 架构师4 设计模式之责任链模式
文章图片
责任链模式.png 请求抽象类AbstractRequest:
public abstract class AbstractRequest { public final String requestType; public AbstractRequest(String requestType) { this.requestType = requestType; } public abstract String getRequestType(); }

请求具体类Request:
public class Request extends AbstractRequest { public request(String requestType) { super(requestType); }@Override public String getRequestType() { return requestType; } }

抽象处理类AbstractHandler:
abstract class AbstractHandler { public AbstractHandler nextHandler; void handleRequest(AbstractRequest request) { if (getHandlerType().equals(request.getRequestType())) { handle(); } else if (nextHandler != null) { nextHandler.handleRequest(request); } else { System.out.println("没有可处理的对象"); } }abstract void handle(); abstract String getHandlerType(); }

【Android|Android 架构师4 设计模式之责任链模式】粉丝类型邮件FansHandler:
public class FansHandler extends AbstractHandler { @Override void handle() { System.out.println("处理" + getHandlerType() + "邮件"); }@Override String getHandlerType() { return "粉丝类型"; } }

抱怨类型邮件ComplaintHandler:
public class ComplaintHandler extends AbstractHandler { @Override void handle() { System.out.println("处理" + getHandlerType() + "邮件"); }@Override String getHandlerType() { return "抱怨类型"; } }

店家类型邮件ShopHandler:
public class ShopHandler extends AbstractHandler { @Override void handle() { System.out.println("处理" + getHandlerType() + "邮件"); }@Override String getHandlerType() { return "店家类型"; } }

垃圾类型邮件SpamHandler:
public class SpamHandler extends AbstractHandler { @Override void handle() { System.out.println("处理" + getHandlerType() + "邮件"); }@Override String getHandlerType() { return "垃圾类型"; } }

Android|Android 架构师4 设计模式之责任链模式
文章图片
1.png 公司去处理这些邮件,按照某种顺序,这里的顺序为:粉丝类型 —> 抱怨类型 —> 店家类型 —> 垃圾类型,这里从左往右形成了一个链子,前一个持有后一个的引用。
public class Client { public static void main(String[] args) { List list = Arrays.asList("粉丝类型", "抱怨类型", "店家类型", "垃圾类型"); Random random = new Random(); FansHandler fansHandler = new FansHandler(); ComplaintHandler complaintHandler = new ComplaintHandler(); ShopHandler shopHandler = new ShopHandler(); SpamHandler spamHandler = new SpamHandler(); fansHandler.nextHandler = complaintHandler; complaintHandler.nextHandler = shopHandler; shopHandler.nextHandler = spamHandler; Request request = new Request(list.get(random.nextInt(4))); fansHandler.handleRequest(request); } }

运行,打印输出:
处理垃圾类型邮件!

责任链模式在Android中的应用 事件分发机制、Broadcast广播机制
总结 责任链模式的优点是将请求的发送者和接收者解耦;可以简化你的对象,因为它不需要知道链的结构;通过改变链内的成员或调动它们的次序,允许你动态地新增或者删除责任。而缺点就是并不保证请求一定会被执行;可能不容易观察运行时的特征,有碍于除错。
喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!

    推荐阅读