/*
* 责任链模式
* 优点
* 将请求和处理分开,两者解耦,提高系统的灵活性。
* 缺点
* 性能问题,请求链比较长时,消耗性能打
* 调试不很方便
*/
public class MyMain {
public static void main(String[] args) {
//定义三个级别的请求
Handler handlerSSS=new HandlerSSS();
Handler handlerSS=new HandlerSS();
Handler handlerS=new HandlerS();
//设置处理顺序
handlerS.setNextHandler(handlerSS);
handlerSS.setNextHandler(handlerSSS);
//生成一个等级请求,并申请处理
AbstractRequest requestS=new RequestS();
AbstractRequest requestSS=new RequestSS();
AbstractRequest requestSSS=new RequestSSS();
AbstractRequest requestSSSS=new RequestSSSS();
System.out.println("***********************");
System.out.println("开始处理S级请求-----------------------");
handlerS.HandleMessage(requestS);
System.out.println("S级请求处理结束---------------------");
System.out.println("***********************");
System.out.println("开始处理SS级请求--------------------");
handlerS.HandleMessage(requestSS);
System.out.println("SS级请求处理结束-------------------");
System.out.println("***********************");
System.out.println("开始处理SSS级请求---------------------");
handlerS.HandleMessage(requestSSS);
System.out.println("SSS级请求处理结束---------------------");
System.out.println("***********************");
System.out.println("开始处理SSSS级请求---------------------");
handlerS.HandleMessage(requestSSSS);
System.out.println("SSSS级请求处理结束---------------------");
System.out.println("***********************");
}
}
//抽象的处理请求类(处理者)
abstract class Handler{
//能处理请求的级别
private int level=0;
//不能处理时将请求发往下一个处理请求对象
private Handler nextHandler;
//决定是否能够处理请求
public final void HandleMessage(AbstractRequest request) {
//判断是否能够处理该请求
if(request.getLevel()==this.level)
response(request);
else {
if(this.nextHandler!=null)
{
System.out.println("处理等级不足,调用下一个处理类。");
//给下一个处理类处理
this.nextHandler.HandleMessage(request);
}
else {
System.out.println("没有后续处理了");
}
}
}
//处理请求
abstract protected void response(AbstractRequest request);
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public Handler getNextHandler() {
return nextHandler;
}
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
}
//抽象的请求类
abstract class AbstractRequest{
//请求等级
int level=0;
//请求内容
String content="";
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
class HandlerSSS extends Handler{
//设置处理等级1
public HandlerSSS() {
setLevel(1);
}
@Override
protected void response(AbstractRequest request) {
System.out.println("请求内容是:"+request.getContent());
System.out.println("SSS级别处理类开始处理该请求");
}
}
class HandlerSS extends Handler{
//设置处理等级2
public HandlerSS() {
setLevel(2);
}
@Override
protected void response(AbstractRequest request) {
System.out.println("请求内容是:"+request.getContent());
System.out.println("SS级别处理类开始处理该请求");
}
}
class HandlerS extends Handler{
//设置处理等级3
public HandlerS() {
setLevel(3);
}
@Override
protected void response(AbstractRequest request) {
System.out.println("请求内容是:"+request.getContent());
System.out.println("S级别处理类开始处理该请求");
}
}
class RequestSSSS extends AbstractRequest{
public RequestSSSS() {
setLevel(0);
setContent("这是SSSS级请求");
}
}
class RequestSSS extends AbstractRequest{
public RequestSSS() {
setLevel(1);
setContent("这是SSS级请求");
}
}
class RequestSS extends AbstractRequest{
public RequestSS() {
setLevel(2);
setContent("这是SS级请求");
}
}
class RequestS extends AbstractRequest{
public RequestS() {
setLevel(3);
setContent("这是S级请求");
}
}
设计23式—责任链
最新推荐文章于 2024-09-20 14:37:00 发布