知识大全 责任链模式(Chain of Responsibility)

Posted

篇首语:天才就是无止境刻苦勤奋的能力本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 责任链模式(Chain of Responsibility)相关的知识,希望对你有一定的参考价值。

责任链模式(Chain of Responsibility)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   描述     责任链模式(CoR)建议发出请求的对象与可能处理这个请求的对象集合之间是低耦合的(set of potential request handler objects)     在有不止一个对象可以处理或实现(fulfill)客户请求的时候 责任链模式(CoR)认为顺序地给每一个对象一次处理请求的机会 在这种情况下应用责任链模式(CoR) 把每一个可能处理请求的对象以链表的形式组织起来 在链表中 每一个对象有一个指向下一个对象的指针(Pointer) 在链表中的第一个对象接受请求并且决定是否处理它 或者把它传递    给下一个对象 请求一个接一个地遍历(flow through)链表中的所有对象 直到请求被其中的一个对象处理或者因到达链表尾而没有被处理     例如 如果A?〉B?〉C都可以处理请求 按照这个顺序 A处理请求或者在不知B是否可以处理这个请求的情况下递给B 接受到请求的B可以处理这个请求或者传递给C     当C收到请求时 这个请求可以被C处理或者没有经过任何处理而结束 换句话说 提交的处理链表中的请求在到达链表尾前 可以不被任何处理     下面是责任链模式(CoR)一些重要的特征     ( )  可能处理请求的对象集合(set of potential request handler objects)以及它们在链表中的顺序是由客户端根据现应用的状态在运行时动态决定的     ( )  客户端根据现在的状态 对于不同的请求类型 可以拥有不同的可能处理请求的对象集合(set of potential request handler objects) 一个处理请求的对象也可以根据客户应用的状态和请求类型 把请求传递给不同的处理对象 为了使这些交互简单 所有的可能处理请求的对象应提供一致的接口 在JAVA中 不同处理对象可以实现一个共同的接口或者继承同一个抽象的父类来实现     ( )  客户对象初始化请求 或者在不知道这些对象是否能处理这个请求的情况下初始化任何可能处理请求的对象 也就是说 客户对象和在处理链表中的处理对象都不需要知道到底哪个对象去处理这个请求     ( )  请求不能保证被处理 也就是 在没有处理的情况下 请求已经到达了处理链表尾 下面的这个情景展示了一个购买请求传递到处理链表中 但是在到达链表尾时 并没有被接受      例子     让我们模拟一个在特定组织里的购买请求(PR)授权过程的应用 通常 在确立订单并发到卖方前 一个购买请求是需要不同的管理代表授权的 我们假定一个组织中在购买请求金额限制上分为四个授权管理层次 如下面的列表     Table : Levels of PR Authorization  Management Level   Authorization Limit  Branch Manager  $   Regional Director  $   Vice President  $   President and COO  $    >  我们可以定义不同的类 来对应上面列表中的不同管理层次   Listing : Classes Representing Different Management Levels    class BranchManager   static double LIMIT = ;  …  …  //End of class  class RegionalDirector   static double LIMIT = ;  …  …  //End of class  class VicePresident   static double LIMIT = ;  …  …  //End of class  class PresidentCOO   static double LIMIT = ;  …  …  //End of class    让我们定义一个PurchaseRequest类 它代表购买请求     PurchaseRequest  ID:int  description:String  amount:double  getAmount():double   >  Figure : PurchaseRequest Class Representation    Listing : PurchaseRequest Class    class PurchaseRequest   private int ID;  private String description;  private double amount;  public PurchaseRequest(int id String desc double amt)   ID = id;  description = desc;  amount = amt;    public double getAmount()   return amount;    public String toString()   return ID + : + description;        一个给定的购买请求(PR)被上面的管理代表所授权或处理 换句话说 代表不同管理层次的四个类都是处理给定购买请求的可能处理者(授权者) 因此 不建议PurchaseRequest实例榜定到任何的一个授权者 通过使用责任链模式(CoR) 实现了PurchaseRequest对象和可能授权请求的对象集合之间关联的低耦合     利用责任链模式(CoR) 让我们定义一个抽象类PRHandler 它定义这些可能授权购买请求对象的统一接口     Listing : Abstract PRHandler Class    public abstract class PRHandler   private PRHandler nextHandler;  private String handlerName;  public PRHandler(String name)   handlerName = name;    public String getName()   return handlerName;    public abstract boolean authorize(PurchaseRequest request);  public PRHandler getNextHandler()   return nextHandler;    public void setNextHandler(PRHandler handler)   nextHandler = handler;  ;     >  Figure : Purchase Request Approver Hierarchy    现在 每一个授权者被重新定义为抽象类PRHandler的子类 每一个授权对象把购买请求的金额和它所在的管理层次所授权的金额进行比较 如果请求的金额小于授权的金额 它就可以授权购买 如果大于 它传递购买请求到链表中的下一个授权者     Listing : PRHandler Concrete Subclasses    class BranchManager extends PRHandler   static double LIMIT = ;  public BranchManager(String name)   super(name);    public boolean authorize(PurchaseRequest request)   double amount = request getAmount();  if (amount <= LIMIT)   System out println( Branch Manager + getName() +   has authorized the PR ? + request);  return true;   else   //forward the request to the next handler  return getNextHandler() authorize(request);      //End of class  class RegionalDirector extends PRHandler   static double LIMIT = ;  public RegionalDirector(String name)   super(name);    public boolean authorize(PurchaseRequest request)   double amount = request getAmount();  if (amount <= LIMIT)   System out println( Regional Director + getName() +   has authorized the PR ? +  request);  return true;   else   //forward the request to the next handler  return getNextHandler() authorize(request);      //End of class  class VicePresident extends PRHandler   static double LIMIT = ;  public VicePresident(String name)   super(name);    public boolean authorize(PurchaseRequest request)   double amount = request getAmount();  if (amount <= LIMIT)   System out println( V P + getName() +   has authorized the PR ? + request);  return true;   else   //forward the request to the next handler  return getNextHandler() authorize(request);      //End of class  class PresidentCOO extends PRHandler   static double LIMIT = ;  public PresidentCOO(String name)   super(name);    public boolean authorize(PurchaseRequest request)   double amount = request getAmount();  if (amount <= LIMIT)   System out println( President & COO + getName() +   has authorized the PR ? + request);  return true;   else   System out println( PR ? + request +   couldn t be authorized \\n +   Executive Board needs to be +   consulted for approval \\n +   reason: Amount too large );  return false;      //End of class    为了授权购买请求 客户端需要     ( )  创建一个可能接受购买请求的授权对象集合 把他们按照授权金额升序进行排列 使用setNextHandler(PRHandler)方法 连接每一个授权者 下面是可能的授权购买请求的授权链表:   >  Figure cha138/Article/program/Java/gj/201311/27453

相关参考

知识大全 java 设计模式之责任链模式

   不知道大家都写过宏没有就是一个键绑定多个技能如果排在前面的技能有CD则跳过此技能会执行之后的技能记得曾经玩DK打怪的时候就是用一个键一直按就行了在servlet里的

知识大全 责任链

Java设计模式:责任链  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &n

胶原纤维的装配过程都经过哪些步骤?

胶原纤维是经多步过程装配而成,包括胶原分子的合成、分泌和修饰等步骤。  (1)内质网膜结合的核糖体上合成胶原分子的多肽链,最初合成的多肽链为前体肽链,称为前α链(pro-αchain)。  (2)合成

知识大全 浅谈.net 中的职责链模式的使用

  职责链模式使多个对象都有机会处理请求从而避免请求的发送者和接收者之间的耦合关系将这些对象连成一条链并沿着这条链传递该请求直到有一个对明处理它为止  职责链模式的结果如下图    Handler:定

胶原的合成、装配和分泌的过程怎样?何时成为水不溶性的?

首先在粗面内质网的核糖体上合成仅含有信号肽的原α链(pro-α-chain),又称前原胶原(preprocollagen),原α链进入内质网。然后在内质网腔中通过分子内交联,三股前体肽自我装配形成三股

知识大全 Dow Supply Chain 一面

DowSupplyChain一面  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!是个男HR面我的,非

知识大全 JavaScript中的[[scope]]和Scope Chain

JavaScript中的[[scope]]和ScopeChain  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 联合利华Supply Chain一面面经

联合利华SupplyChain一面面经  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!时间12:10

知识大全 过多if-else分支的优化

  我想谈一谈这个话题是因为我的上一篇博客有一些朋友回复说ifelse过多的分支可以使用switch或者责任链模式等等方式来优化确实这是一个小问题不过我们还是可以整理一下这个小问题的重构方式>  为什

知识大全 but of 是什么意思

butof是什么意思?butof不是什么固定搭配是根据前半句出来的用法如:Lifeisn’tamatterofmilestones,butofmoments...but依然表示转折的意思,of前面省略