Java设计模式–责任链模式
-
定义
为请求创建创建一个接收者对象的链 -
实现
public class ChainOfResponsibilityTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Request request=new Request.RequestBuilder().frequentOk(false).loggedOn(false).build();
RequestFrequentHandler requestFrequentHandler=new RequestFrequentHandler(new LoggingHandler(null));
if(requestFrequentHandler.process(request)) {
System.out.println("正常业务处理");
}else {
System.out.println("访问异常");
}
}
}
class Request{
private boolean loginOn;
private boolean frequentOk;
private boolean isPwemits;
private boolean containSensitiveWord;
private String requestBody;
private Request() {
}
public Request(boolean loginOn, boolean frequentOk, boolean isPwemits, boolean containSensitiveWord,
String requestBody) {
super();
this.loginOn = loginOn;
this.frequentOk = frequentOk;
this.isPwemits = isPwemits;
this.containSensitiveWord = containSensitiveWord;
this.requestBody = requestBody;
}
public Request(boolean loginOn, boolean frequentOk, boolean isPwemits, boolean containSensitiveWord) {
super();
this.loginOn = loginOn;
this.frequentOk = frequentOk;
this.isPwemits = isPwemits;
this.containSensitiveWord = containSensitiveWord;
}
public boolean isLoginOn() {
return loginOn;
}
public void setLoginOn(boolean loginOn) {
this.loginOn = loginOn;
}
public boolean isFrequentOk() {
return frequentOk;
}
public void setFrequentOk(boolean frequentOk) {
this.frequentOk = frequentOk;
}
public boolean isPwemits() {
return isPwemits;
}
public void setPwemits(boolean isPwemits) {
this.isPwemits = isPwemits;
}
public boolean isContainSensitiveWord() {
return containSensitiveWord;
}
public void setContainSensitiveWord(boolean containSensitiveWord) {
this.containSensitiveWord = containSensitiveWord;
}
public String getRequestBody() {
return requestBody;
}
public void setRequestBody(String requestBody) {
this.requestBody = requestBody;
}
static class RequestBuilder{
private boolean loginOn;
private boolean frequentOk;
private boolean isPwemits;
private boolean containSensitiveWord;
RequestBuilder loggedOn(boolean loggedOn) {
this.loginOn=loggedOn;
return this;
}
RequestBuilder frequentOk(boolean frequentOk) {
this.frequentOk=frequentOk;
return this;
}
RequestBuilder isPwemits(boolean isPwemits) {
this.isPwemits=isPwemits;
return this;
}
RequestBuilder containSensitiveWord(boolean containSensitiveWord) {
this.containSensitiveWord=containSensitiveWord;
return this;
}
public Request build() {
Request request=new Request(loginOn,frequentOk,isPwemits,containSensitiveWord);
return request;
}
}
}
abstract class Handler{
Handler next;
public Handler(Handler next) {
super();
this.next = next;
}
public Handler getNext() {
return next;
}
public void setNext(Handler next) {
this.next=next;
}
abstract boolean process(Request request);
}
class RequestFrequentHandler extends Handler{
public RequestFrequentHandler(Handler next) {
super(next);
// TODO Auto-generated constructor stub
}
@Override
boolean process(Request request) {
// TODO Auto-generated method stub
System.out.println("访问频率");
if(request.isFrequentOk()) {
Handler next=getNext();
if(null==next) {
return true;
}
if(!next.process(request)) {
return false;
}else {
return true;
}
}
return false;
}
}
class LoggingHandler extends Handler{
public LoggingHandler(Handler next) {
super(next);
// TODO Auto-generated constructor stub
}
@Override
boolean process(Request request) {
// TODO Auto-generated method stub
System.out.println("登陆验证");
if(request.isLoginOn()) {
Handler next=getNext();
if(null==next) {
return true;
}
if(!next.process(request)) {
return false;
}else {
return true;
}
}
return false;
}
}
简简单单实现了其中的两个,当然还有几个可以自行解决
- 应用场景
-
一个请求的处理需要多个对象当中的一个或几个协作处理器
- 优点
-
1.请求的发送者和接收者解耦 2.可以控制执行顺序 3.符合开闭原则和单一职责原则
- 经典案例
-
java.servlet.Filter javax.servlet.FilterChain