您的位置:首页 > 其它

设计模式其实很简单学习笔记:设计模式之职责链模式

2014-12-31 10:12 501 查看
定义
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这多个对象连成一条链,

并沿着这条链传递该请求,直到有一个对象处理它为止。

解释

即将请求的处理者们组织成一条链,使请求沿着这条职责链传递,直到有一个处理者将其处理或者传递到链的末尾仍没有被处理。

使用职责链模式,请求发送者不需要关心请求的处理细节,请求是如何传递的以及是谁处理了请求,这样就将请求的发送者与请求的处理者进行了解耦

结构图



基本代码

//处理请求的接口
public abstract class Handler
{
protected Handler successor;//指向下一个请求处理者

//设置下一个处理者
public void SetSuccessor(Handler successor)
{
this.successor=successor;
}
//抽象的处理请求的方法
public abstract void HandlerRequest(int request);
}

//具体请求处理者A

public class ConcreteHandlerA extends Handler
{
//覆盖父类的抽象方法
@Override
public void HandlerRequest(int request)
{
if(request==1)
{
System.out.println(this.getClass().getCanonicalName()+"处理了请求:"+request);
}else
{
if(this.successor!=null)
{
System.out.println(this.getClass().getCanonicalName()+"自身无法处理请求,转给下一个处理者!");
this.successor.HandlerRequest(request);
}
}
}
}

//具体请求处理者B

public class ConcreteHandlerB extends Handler
{
//覆盖父类的抽象方法
@Override
public void HandlerRequest(int request)
{
if(request==2)
{
System.out.println(this.getClass().getCanonicalName()+"处理了请求:"+request);
}else
{
if(this.successor!=null)
{
System.out.println(this.getClass().getCanonicalName()+"自身无法处理请求,转给下一个处理者!");
this.successor.HandlerRequest(request);
}
}
}
}

//具体请求处理者C

//具体请求处理者C
public class ConcreteHandlerC extends Handler
{
//覆盖父类的抽象方法
@Override
public void HandlerRequest(int request)
{
if(request==3)
{
System.out.println(this.getClass().getCanonicalName()+"处理了请求:"+request);
}else
{
if(this.successor!=null)
{
System.out.println(this.getClass().getCanonicalName()+"自身无法处理请求,转给下一个处理者!");
this.successor.HandlerRequest(request);
}
}
}
}

//客户端代码

public static void main(String[] args)
{
Handler handlerA=new ConcreteHandlerA();
Handler handlerB=new ConcreteHandlerB();
Handler handlerC=new ConcreteHandlerC();

handlerA.SetSuccessor(handlerB);
handlerB.SetSuccessor(handlerC);

for(int i=0;i<4;i++)
{
handlerA.HandlerRequest(i);//将请求发送到职责链上
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: