责任链模式
2020-10-26 19:27:53   0  举报             
     
         
 责任链模式
    作者其他创作
 大纲/内容
 ==责任链模式(对象行为模式)==避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。==角色==    Handler(抽象处理者):它定义了处理请求的接口,一般设计成抽象类,持有一个处理器的引用,如果自己无法处理请求则转给下一个处理器。通过该引用,处理者可以连成一条链。    ConcreteHandler(具体处理者):它是抽象处理者的子类,可以处理用户请求,在具体处理者类中实现了抽象处理者中定义的抽象请求处理方法,在处理请求之前需要进行判断,看是否有相应的处理权限,如果可以处理请求就处理它,否则将请求转发给后继者;在具体处理者中可以访问链中的下一个对象,以便转发请求纯责任链模式    1. 一个具体的请求只能选择其中一个处理器:要么承担前部责任,要么把处理责任推给下家,不允许出现某个处理器处理了一部分又继续向下传递。    2. 一个请求必须被某一个处理者对象所接收,不能出现某个请求未被任何一个处理者对象处理的情况。不纯的责任链模式  1. 允许某个请求被一个具体的处理器处理后再向下传递  2. 一个具体的处理器处理完某请求后还可以继续处理该请求  3. 一个请求最终可以不被任何处理器所处理
  不纯的责任链模式
  AbstractSuppot
  + name:String + next:AbstractSupport
  + handleRequest(Object):void+ setNextHandler(AbstractSupport):return AbstractSupport
    AbstractSupport
  + name:String + next:AbstractSupport
  + process(Object):void- fail(Object)- done(Object)- resolve(Object):Boolean+ setNext(AbstractSupport):AbstractSupport
  package com.zero.headfirst.chain.support;import java.util.Objects;/** * 抽象处理器:定义了抽象请求处理方法,持有一个抽象处理器的引用,用于生成一条处理链 */public abstract class AbstractSupport {    private String name;    private AbstractSupport next;    /**     * 定义处理请求的算法模板     */    public final void process(NumberData numberData) {        if (resolve(numberData)) {            done(numberData);        } else if (Objects.nonNull(next)) {            next.process(numberData);        } else {            fail(numberData);        }    }    /**     * 无法处理     * @param numberData     */    protected  void fail(NumberData numberData) {        System.out.println(numberData + \" cannot be resolved.\");    }    /**     * 成功处理     * @param numberData     */    protected void done(NumberData numberData) {        System.out.println(numberData + \" is resolved by \" + this + \".\");    }    /**     * 判断是否能处理,子类重写     * @param numberData     * @return     */    protected abstract boolean resolve(NumberData numberData);    public AbstractSupport setNext(AbstractSupport next) {        this.next = next;        return next;    }    public AbstractSupport(String name) {        this.name = name;    }    @Override    public String toString() {        return \"AbstractSupport{\" +                \"name='\" + name + '\\'' +                '}';    }}
  纯责任链模式
  package com.zero.design.actions.dutychain;/** * 责任链抽象类,包含核心处理方法,以及后继责任处理器设置.由不同的处理器继承 */public abstract class AbstractLeaderHandler {    protected String handlerName;    /**     * 责任链上的后继对象,即这个对象无法处理,就转移给下一个Leader     */    protected AbstractLeaderHandler nextLeaderHandler;    public AbstractLeaderHandler(String handlerName) {        this.handlerName = handlerName;    }    /**     * 处理请求的核心的业务方法     * 需要不同继承该类的处理器自己实现     * @param request     */    public abstract void handleRequest(LeaveRequest request);    /**     * 设定责任链上的后继对象     * @param nextLeaderHandler     */    public AbstractLeaderHandler setNextLeaderHandler(AbstractLeaderHandler nextLeaderHandler) {        this.nextLeaderHandler = nextLeaderHandler;        return nextLeaderHandler;    }}
   
 
 
 
 
  0 条评论
 下一页
  
   
  
  
  
  
  
  
  
  
 