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 "垃圾类型";
}
}
文章图片
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广播机制
总结 责任链模式的优点是将请求的发送者和接收者解耦;可以简化你的对象,因为它不需要知道链的结构;通过改变链内的成员或调动它们的次序,允许你动态地新增或者删除责任。而缺点就是并不保证请求一定会被执行;可能不容易观察运行时的特征,有碍于除错。
喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- android第三方框架(五)ButterKnife
- 眼光要放高远
- 子龙老师语录
- Android中的AES加密-下
- 孩子行为背后的秘密(2)胡老师讲座感悟
- 带有Hilt的Android上的依赖注入
- 绘本讲师训练营【24期】14/21阅读原创《小黑鱼》
- 绘本讲师训练营【18期】14/21《我的情绪小怪兽》故事会新体验
- 绘本讲师训练营7期9/21阅读原创《蜗牛屋|绘本讲师训练营7期9/21阅读原创《蜗牛屋 》