Java模式开发之责任链模式
责任链设计模式(过滤器、拦截器)

责任链设计模式(过滤器、拦截器)责任链设计模式(Chain of Responsibility)的应⽤有:Java Web中的过滤器链、Struts2中的拦截器栈。
先看⼀个问题:给定⼀个字符串“被就业了:),敏感信息,<script>”,对其中的HTML标记和敏感词进⾏过滤或替换。
本⽂主要以该问题设计⽅法的演变来讲解责任链设计模式。
第⼀种设计:没有任何设计模式设计了⼀个MsgProcessor类,完成字符串处理的主要⼯作。
MainClass类是本设计中的测试类。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30public class MainClass {public static void main(String[] args) {//需要被过滤的语句String msg = "被就业了:),敏感信息,<script>"; //实例化处理类MsgProcessor mp = new MsgProcessor(msg); String r = mp.process();System.out.println(r);}}public class MsgProcessor {private String msg;public MsgProcessor(String msg){this.msg = msg;}public String process(){String r = msg;//过滤msg中的HTML标记r = r.replace("<", "<").replace(">", ">");//过滤敏感词r = r.replace("敏感", "").replace("被就业", "就业"); return r;}}第⼆种设计:增加⼀个Filter接⼝在第⼀种设计中,对字符串的所有处理都放在MsgProcessor类中,扩展性极差。
Java的23种开发模式

1、工厂模式:客户类和工厂类分开。
消费者任何时候需要某种产品,只需向工厂请求即可。
消费者无须修改就可以接纳新产品。
缺点是当产品修改时,工厂类也要做相应的修改。
如:如何创建及如何向客户端提供。
2、建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。
建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。
建造模式可以强制实行一种分步骤进行的建造过程。
3、工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
4、原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。
原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。
缺点是每一个类都必须配备一个克隆方法。
5、单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。
单例模式只应在有真正的“单一实例”的需求时才可使用。
6、适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。
适配类可以根据参数返还一个合适的实例给客户端。
7、桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。
8、合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。
合成模式就是一个处理对象的树结构的模式。
合成模式把部分与整体的关系用树结构表示出来。
合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。
《Java设计模式大全》

《Java设计模式大全》Java语言是当今非常流行的编程语言,在Web开发、大数据处理、机器学习等领域都有广泛的应用。
Java设计模式是Java开发中非常重要的一部分,它可以帮助开发者更好地组织和管理代码,提高代码的可重用性和可维护性。
本文将为大家介绍Java设计模式的各种类型,以及如何在实际开发中应用这些设计模式。
一、什么是设计模式设计模式是指在软件设计过程中经过反复验证,被广泛应用并被认同的一种解决特定问题的方案。
设计模式是对软件设计经验的总结和提炼,它可以指导开发者在特定情境下进行面向对象的软件设计和编程。
设计模式在软件开发中的作用是非常重要的,它可以提高软件的可扩展性、可维护性和可复用性,减少软件开发过程中的重复工作,同时还可以让开发者更好地进行沟通和协作。
二、Java设计模式的分类Java设计模式按照其目的和形式可以分为以下三种类型。
1、创建型模式创建型模式是一种用于创建对象的模式,它主要是处理对象的实例化、初始化和组合等问题。
这种模式在需要对对象的具体实现进行隔离时非常有用,它可以让代码更加灵活和可维护。
常见的创建型模式有:简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。
2、结构型模式结构型模式是一种用于描述对象之间组合方式的模式,它关注的是对象的组合和协作方式。
结构型模式可以允许开发者通过某些方式,将对象组织起来以满足特定需求。
常见的结构型模式有:适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。
3、行为型模式行为型模式是一种用于描述对象之间消息传递和流程控制的模式,它关注的是对象之间的交互方式和协作机制。
行为型模式可以帮助开发者构建一个有机的、高度可扩展的软件系统。
常见的行为型模式有:责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。
三、Java设计模式的应用Java设计模式是一种非常实用的开发技巧,它可以帮助开发者更好地组织和管理代码,提高软件的可重用性和可维护性,同时也可以让团队进行更加高效的协作和沟通。
java职责链模式实现多级审批流程的方法

java职责链模式实现多级审批流程的方法下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!Java职责链模式在多级审批流程中的应用在软件设计模式中,职责链模式是一种行为设计模式,它允许将请求沿着处理者对象的链式结构进行传递,直到某个对象能够处理这个请求。
责任链策略+策略模式组合

责任链策略+策略模式组合责任链模式(Chain of Responsibility Pattern)和策略模式(Strategy Pattern)都是设计模式中的重要组成部分,可以有效地解决一些特定的问题。
将两者组合使用,可以在责任链的每个节点上应用不同的策略,从而实现策略的动态切换和组合。
在责任链模式中,多个对象可以处理请求,但只有一个对象能够处理请求并返回结果。
其他对象则将请求传递给下一个对象,直到某个对象处理了请求。
这种模式可以用于解耦对象之间的依赖关系,使得请求的传递和处理更加灵活。
策略模式则允许将算法独立于使用它的客户端而变化。
它定义了一系列算法,并将每个算法封装起来,使得它们可以互相替换。
策略模式使得算法可以独立于使用它的客户端而变化,从而提高了系统的灵活性和可扩展性。
将责任链模式和策略模式组合使用,可以在责任链的每个节点上应用不同的策略。
这样,客户端只需要与链中的一个节点进行交互,就可以使用不同的策略。
客户端只需要知道特定节点的接口,而不必关心其他节点的具体实现。
这样可以使系统的实现更加灵活,也方便了系统的扩展和维护。
具体实现时,可以按照以下步骤进行:1. 定义抽象策略:创建一个接口,定义一些方法来处理不同的任务或操作。
2. 定义多个策略类:实现抽象策略接口,并实现各自的方法。
这些策略类将根据不同的需求实现不同的算法或行为。
3. 创建责任链:定义一个责任链接口和实现类,责任链接口包含一些方法用于处理请求,这些方法会将请求传递给链中的下一个对象。
4. 在客户端中使用责任链:客户端只需要与链中的一个节点进行交互,就可以使用不同的策略。
通过这种方式,客户端可以根据需要选择不同的策略,而无需修改客户端代码。
同时,这种组合使用也使得系统的实现更加灵活和可扩展。
责任链模式实现的三种方式

责任链模式实现的三种⽅式责任链模式责任链模式的定义:使多个对象都有机会处理请求,从⽽避免请求的发送者和接受者之间的耦合关系,将这个对象连成⼀条链,并沿着这条链传递该请求,直到有⼀个对象处理他为⽌。
这⾥就不再过多的介绍什么是责任链模式,主要来说说java中如何编写。
主要从下⾯3个框架中的代码中介绍。
servlet中的filterdubbo中的filtermybatis中的plugin 这3个框架在实现责任链⽅式不尽相同。
servlet中的Filterservlet中分别定义了⼀个 Filter和FilterChain的接⼝,核⼼代码如下:public final class ApplicationFilterChain implements FilterChain {private int pos = 0; //当前执⾏filter的offsetprivate int n; //当前filter的数量private ApplicationFilterConfig[] filters; //filter配置类,通过getFilter()⽅法获取Filterprivate Servlet servlet@Overridepublic void doFilter(ServletRequest request, ServletResponse response) {if (pos < n) {ApplicationFilterConfig filterConfig = filters[pos++];Filter filter = filterConfig.getFilter();filter.doFilter(request, response, this);} else {// filter都处理完毕后,执⾏servletservlet.service(request, response);}}}代码还算简单,结构也⽐较清晰,定义⼀个Chain,⾥⾯包含了Filter列表和servlet,达到在调⽤真正servlet之前进⾏各种filter逻辑。
责任链模式的应用场景
责任链模式的应用场景责任链模式是一种行为设计模式,它通过一系列的处理器对象形成一个链,每个处理器都有机会处理请求,直到请求被处理或者到达链的末端。
该模式常用于解耦发送者和接收者,将请求沿着链传递,并动态地决定由哪个处理器来处理请求。
责任链模式的应用场景非常广泛,下面将介绍几个典型的应用场景:1. 请求处理链:在一个系统中,可能存在多个处理器,每个处理器负责不同的处理逻辑。
通过使用责任链模式,可以将这些处理器连接成一个处理链,每个请求按照处理链的顺序依次经过处理器进行处理,直到找到合适的处理器处理请求或者请求被拒绝。
这种模式可以实现请求的动态处理和灵活的扩展,提高系统的可维护性和可扩展性。
2. 日志记录:在日志记录的场景中,可以使用责任链模式来实现不同级别的日志记录。
例如,系统中分为普通日志、警告日志和错误日志三个级别,每个级别对应一个处理器,处理器根据日志级别来决定是否处理该日志,以及如何处理。
这样,请求日志的对象只需要将日志传递给处理链的第一个处理器,而无需关心具体的处理过程,大大简化了代码的编写和维护。
3. 身份认证:在网络应用中,身份认证是一个重要的功能。
责任链模式可以用于实现不同方式的身份认证,例如用户名密码认证、邮箱验证码认证、短信验证码认证等。
每个认证方式都可以由一个处理器来处理,根据请求的方式和内容来判断是否通过认证。
如果一个处理器无法认证通过,则将请求传递给下一个处理器进行处理,直到找到合适的处理器或者认证失败。
4. 资源分配:在资源分配的场景中,可以使用责任链模式来实现资源的动态分配和优化。
例如,一个服务器集群中存在多台服务器,每台服务器负责处理不同类型的请求。
通过使用责任链模式,可以将请求按照类型分发给不同的服务器进行处理,实现负载均衡和资源优化。
5. 异常处理:在系统开发中,异常处理是一个重要的环节。
责任链模式可以用于实现异常的捕获和处理。
可以将异常捕获的逻辑封装在处理器中,当一个异常被抛出时,责任链上的处理器会依次尝试处理该异常,直到找到合适的处理器或者异常无法处理。
责任链模式(ChainofResponsibilityPattern)
责任链模式(ChainofResponsibilityPattern)责任链模式是一种对象的行为模式。
在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。
请求在这个链上传递,直到链上的某一个对象决定处理此请求。
发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使系统可以在不影响客户端的情况下动态的重新组织链和分配责任。
一、责任链模式的结构1、责任链模式涉及的角色抽象处理者角色(Handler):定义出一个处理请求的接口。
如果需要,接口可以定义出一个方法,以设定和返回下家的引用。
这个角色通常由一个Java抽象类或Java接口实现。
图中的聚合关系给出了具体子类对下家的引用,抽象方法handlerRequest()规范了子类处理请求的操作。
具体处理者角色(ConcreteHandler):具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。
由于处理者持有下家引用,因此,如果需要,具体处理者可以访问下家。
抽象处理者角色public abstract class Handler{protected Handler successor;//定义下家的引用public abstract void handleRequest();//处理方法,调用此方法处理请求public void setSuccessor(Handler successor)//赋值方法,调用此方法设置下家{this.successor = successor;}public Handler getSuccessor()//取值方法,得到下家对象{return successor;}}具体处理者角色,如果有下家,就将请求传给下家,否则就处理请求public class ConcreteHandler extends Handler{public void handleRequest(){if (getSuccessor() != null){System.out.println("The request is passed to " + getSuccessor());getSuccessor().handleRequest();}else{System.out.println("The request is handled here.");}}}客户端角色public class Client{static private Handler handler1, handler2;public static void main(String[] args){handler1 = new ConcreteHandler();handler2 = new ConcreteHandler();handler1.setSuccessor(handler2);handler1.handleRequest();}}客户端创建了2个处理者对象,并指定第一个处理者对象的下家是第2个处理者对象,而第2个处理者对象没有下家。
业务规则校验设计模式
业务规则校验设计模式在软件开发中,业务规则校验是非常重要的一环,它能够确保系统的正确性、一致性和安全性。
在实际开发中,业务规则校验往往是一项重复且繁琐的任务,因此设计一套有效的业务规则校验设计模式是很有必要的。
以下是一些常见的业务规则校验设计模式:1. 策略模式(Strategy Pattern)策略模式是一种行为设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。
在业务规则校验中,可以将每一个校验规则看作是一个策略,通过定义一个统一的接口来抽象每一个校验规则,进而实现校验规则的可替换性。
这样在系统中新增、删除或修改校验规则时,并不需要修改其他代码,只需要替换相应的校验规则即可。
2. 责任链模式(Chain of Responsibility Pattern)责任链模式是一种行为设计模式,它将请求的发送者和接收者解耦,使得多个接收对象都有机会处理请求。
在业务规则校验中,可以将每一个校验规则看作是一个处理对象,通过定义一个统一的接口来抽象每一个校验规则,并将这些校验规则按顺序链接成一个责任链。
当一个对象接收到校验请求时,如果无法处理,则将请求传递给下一个对象,直至有一个对象处理完请求为止。
3. 观察者模式(Observer Pattern)观察者模式是一种对象行为设计模式,它定义了一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。
在业务规则校验中,可以将每一个校验规则看作是一个观察者,而校验的数据则是被观察的对象。
当校验的数据发生变化时,每一个校验规则都会收到通知,并执行相应的校验逻辑。
4. 状态模式(State Pattern)状态模式是一种对象行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。
在业务规则校验中,可以将每一个校验规则看作是一个状态,通过定义一个统一的接口来抽象每一个校验规则,以及定义一个上下文对象来管理这些状态。
装饰模式和职责链模式的对比
装饰模式和职责链模式的对比在软件开发中,设计模式是一个十分重要的概念,是指在软件设计过程中可以重复使用的解决问题的方案。
其中,装饰模式和职责链模式都是常见的设计模式,本文将对这两种模式进行比较分析。
一、装饰模式装饰模式,是指在不改变现有对象的基础上,动态地添加一些新的功能。
这种模式通过创建一个包装对象,也可以叫做装饰器来实现。
在装饰器模式中,有三个主要角色,分别是抽象构件(Component)、具体构件(ConcreteComponent)和装饰器(Decorator)。
其中,抽象构件角色定义了抽象接口,具体构件角色实现抽象接口,而装饰器角色继承了抽象构件角色,并持有一个具体构件的实例,起到包装的作用。
装饰模式的优点是可以动态地添加或删除功能,而且可以从不同的角度来扩展一个类的功能,避免了继承带来的代码复杂性和类爆炸问题。
但缺点是装饰层数过多会增加程序的复杂度,也可能会导致增加了过多的类。
二、职责链模式职责链模式,是指通过建立一个请求的处理链,并且每个节点都有处理请求的机会,直到请求被处理完成。
这种模式拥有很强的扩展性,可以根据需要动态地改变请求的处理流程。
在职责链模式中,有两个主要角色,分别是处理者(Handler)和请求(Request)。
处理者是职责链上的节点,每个处理者都可以处理请求,如果请求不能被当前处理者处理,则将请求传递给下一级处理者。
请求则封装了请求的内容和需要执行的操作。
职责链模式的优点是将请求发送者和接收者解耦,可以动态地改变请求的处理流程,可以避免请求发送者和处理者之间的紧耦合关系。
但缺点是会导致请求的处理延迟,也需要合理设计职责链的节点顺序,避免请求被一直传递下去。
三、装饰模式和职责链模式的比较1. 功能不同装饰模式是为对象动态地添加功能,而职责链模式则是为了解耦并且动态地改变请求的处理流程。
2. 使用场景不同装饰模式适用于需要动态地添加或删除功能的场景,也适用于不想使用继承或希望从不同角度扩展类功能的场景。