今天要认识的模式是Chain of Responsibility,属於Behavioral Design Pattern,它的名字很长,我觉得很好认,而且也不难,现在就一起来认识它吧!
原本你的应用程序从客户端发送请求後,会需要经过一些资料处理的步骤,才能存入系统的资料库中,而这些资料处理的步骤可能会因为系统不断的更新,而导致步骤的顺序变更,抑或是添加新的检验步骤来增加系统的安全性,因此这个检验的程序就会变得非常难以维护且又不好理解,你必须得重构这整件事情。
使用责任链模式的话,会将每个检查的步骤封装成一个独立的类别,其他的请求及数据就用参数的方式来传递给类别中的方法。而这些检查步骤会串成一个链结,而且拥有下一个检查步骤物件的属性,因此客户端的请求会沿着链结一直传递下去,每个节点都有机会去处理这个请求。
Chain of Responsibility在这个例子中,可以随时添加新的检查步骤,也可以移除或修改步骤的方法,甚至是重新调整检查步骤的顺序,端看应用程序的逻辑做动态更新,是不是非常方便呢!
abstract class Handler {
private Handler next;
public Handler(Handler next) {
this.next = next;
}
public void handleRequest() {
if (next != null) {
next.handleRequest();
}
}
}
class HandlerA extends Handler {
public HandlerA(Handler next) {
super(next);
}
public void handleRequest() {
if (canHandleRquest()) {
// do something
} else {
super.handleRequest();
}
}
}
class HandlerB extends Handler {
public HandlerB(Handler next) {
super(next);
}
public void handleRequest() {
if (canHandleRquest()) {
// do something
} else {
super.handleRequest();
}
}
}
责任链模式可以实现较松散的耦合设计,来自客户端的请求会被传递到链结中的物件,接着由这些物件去判定该给谁去处理,以及是否需要给下一个物件来处理请求。若要动态修改链结中的物件或是调整其顺序也是可以接受的,提升了程序整体的灵活性,不过链结中的物件也有可能都没办法处理来自客户端的请求,这也是此模式的缺点之一。
除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章
juck30808 - Python - 数位行销分析与 Youtube API 教学
SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?
<<: Day25:今天来聊一下Azure Sentinel中的威胁情报
>>: 30天打造品牌特色电商网站 Day.24 电商必用的各类提示
在研究类神经网路的程序时,发现会用到一些这概念,因此就来研究了一下。 这四样东西,在机器学习...
「社交网路服务图示区块」可让你将社交媒体图示新增到任何页面或文章,将访客导向到你的社交媒体个人档案...
这一题题目会给我们两个Linked Lists,分别代表两个非负整数。题目要我们把两个数相加後回传一...
不知不觉已经来到最後一天了, 写这系列是临时决定的,每天的库存量都是0,所以有很多文章,我都只挑重点...
https://github.com/firebase/firebase-ios-sdk 然後选择...