亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

責任鏈模式(Chain of Responsibility)

2019-11-18 12:15:46
字體:
來源:轉載
供稿:網友

  描述:
  
  責任鏈模式(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中,不同處理對象可以實現一個共同的接口或者繼續同一個抽象的父類來實現。
  
 ?。?)  客戶對象初始化請求,或者在不知道這些對象是否能處理這個請求的情況下初始化任何可能處理請求的對象。也就是說,客戶對象和在處理鏈表中的處理對象都不需要知道到底哪個對象去處理這個請求。
  
  (4)  請求不能保證被處理。也就是,在沒有處理的情況下,請求已經到達了處理鏈表尾。下面的這個情景展示了一個購買請求傳遞到處理鏈表中,但是在到達鏈表尾時,并沒有被接受。
  
  例子:
  
  讓我們模擬一個在特定組織里的購買請求(PR)授權過程的應用。通常,在確立訂單并發到賣方前,一個購買請求是需要不同的治理代表授權的。我們假定一個組織中在購買請求金額限制上分為四個授權治理層次,如下面的列表:
  
  Table 21.1: Levels of PR Authorization
  Management Level   Authorization Limit
  Branch Manager  $25,000
  Regional Director  $100,000
  Vice President  $200,000
  President and COO  $400,000
  
 責任鏈模式(Chain of Responsibility)(圖一)

  我們可以定義不同的類,來對應上面列表中的不同治理層次。
  Listing 21.1: Classes Representing Different Management Levels
  
  class BranchManager {
  static double LIMIT = 25000;
  …
  …
  }//End of class
  class RegionalDirector {
  static double LIMIT = 100000;
  …
  …
  }//End of class
  class VicePresident {
  static double LIMIT = 200000;
  …
  …
  }//End of class
  class PresidentCOO {
  static double LIMIT = 400000;
  …
  …
  }//End of class
  
  讓我們定義一個PurchaseRequest類,它代表購買請求。
  
  PurchaseRequest
  ID:int
  description:String
  amount:double
  getAmount():double
  
 責任鏈模式(Chain of Responsibility)(圖二)

  Figure 21.1: PurchaseRequest Class Representation
  
  Listing 21.2: 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 21.3: 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;
  };
  }
  
 責任鏈模式(Chain of Responsibility)(圖三)

  Figure 21.2: Purchase Request Approver Hierarchy
  
  現在,每一個授權者被重新定義為抽象類PRHandler的子類。每一個授權對象把購買請求的金額和它所在的治理層次所授權的金額進行比較,假如請求的金額小于授權的金額,它就可以授權購買,假如大于,它傳遞購買請求到鏈表中的下一個授權者。
  
  Listing 21.4: PRHandler Concrete Subclasses
  
  class BranchManager extends PRHandler {
  static double LIMIT = 25000;
  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 = 100000;
  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 = 200000;
  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 = 400000;
  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)方法,連接每一個授權者。下面是可能的授權購買請求的授權鏈表:
  
 責任鏈模式(Chain of Responsibility)(圖四)

  Figure 21

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美疯狂xxxx大交乱88av| 欧美高清无遮挡| 久久综合国产精品台湾中文娱乐网| 色哟哟入口国产精品| 成人免费网站在线观看| 久久精品国产清自在天天线| 国产精品扒开腿做爽爽爽视频| 欧美国产日产韩国视频| 中文国产亚洲喷潮| 日韩av快播网址| 57pao国产精品一区| 亚洲第一福利视频| 久久精品一本久久99精品| 国产性色av一区二区| xxx欧美精品| 奇米4444一区二区三区| 九九视频这里只有精品| 欧美日韩黄色大片| 91探花福利精品国产自产在线| 中文日韩电影网站| 国产噜噜噜噜噜久久久久久久久| 狠狠躁夜夜躁人人躁婷婷91| 日韩精品中文字幕有码专区| yw.139尤物在线精品视频| 亚洲午夜av电影| 色综合久久天天综线观看| 亚洲精品天天看| 国产69久久精品成人| 成人黄色网免费| 国产欧美精品日韩精品| 亚洲成av人乱码色午夜| 久久国产加勒比精品无码| 久久99热精品| 亚洲精品在线观看www| 欧美天堂在线观看| 亚洲电影免费观看高清完整版| 日韩av免费在线播放| 国产精品久久电影观看| 日韩av影视在线| 91爱视频在线| 91tv亚洲精品香蕉国产一区7ujn| 国产精品欧美激情| 清纯唯美日韩制服另类| 91九色国产视频| 欧美中文字幕精品| 中文字幕在线观看亚洲| 欧美视频一区二区三区…| 亚洲国产另类久久精品| 成人观看高清在线观看免费| 一区二区三区视频免费在线观看| 亚洲午夜未满十八勿入免费观看全集| 91高潮在线观看| 国产噜噜噜噜噜久久久久久久久| 欧美久久精品午夜青青大伊人| 久久久免费精品| 久久精品国产亚洲| 国产97在线亚洲| 亚洲3p在线观看| 欧美色另类天堂2015| 日韩av电影手机在线观看| 色婷婷av一区二区三区在线观看| 国产色综合天天综合网| 欧美理论电影在线播放| 日韩精品在线视频| 97av在线播放| 日韩av有码在线| 亚洲成人亚洲激情| 亚洲最大福利视频网| 国外成人在线直播| 国产亚洲精品久久久久久| 一本大道亚洲视频| 精品福利一区二区| 日韩av一区二区在线| 亚洲激情小视频| 成人亚洲激情网| 欧美一区二三区| 国产精品久久久久91| 7777精品久久久久久| 欧美日韩中文字幕在线视频| 中文字幕亚洲一区二区三区| 国产一区二区三区在线播放免费观看| 欧美精品少妇videofree| 91久久久久久久久久久久久| 日韩中文在线中文网三级| 这里只有精品丝袜| 亚洲欧美激情另类校园| 久久视频国产精品免费视频在线| 亚洲精品网址在线观看| 日韩国产在线看| 色先锋久久影院av| 欧美黑人极品猛少妇色xxxxx| 欧美国产高跟鞋裸体秀xxxhd| 亚洲欧美日韩一区二区三区在线| 国产99久久精品一区二区永久免费| 亚洲欧美国产精品久久久久久久| 在线性视频日韩欧美| 欧美日韩亚洲国产一区| 国产精品福利无圣光在线一区| 这里只有精品视频| 精品人伦一区二区三区蜜桃免费| 麻豆国产精品va在线观看不卡| www国产精品com| 精品国偷自产在线视频| 亚洲欧美中文日韩在线v日本| 国产精品毛片a∨一区二区三区|国| 亚洲精品98久久久久久中文字幕| 欧美精品做受xxx性少妇| 亚洲天堂色网站| 国产一区av在线| 日韩精品久久久久| 日韩高清电影免费观看完整| 亚洲xxxx妇黄裸体| 日韩av在线播放资源| 欧美激情a在线| 欧美美最猛性xxxxxx| 国产精品久久久久久av福利软件| 国内精品小视频| 久99九色视频在线观看| 青青久久av北条麻妃黑人| 欧美裸体xxxx极品少妇| 久久中文字幕在线| 久久福利视频导航| 在线视频欧美日韩| 久久久国产一区| 日韩精品一二三四区| 精品在线观看国产| 欧美乱大交xxxxx| 国产精品日韩欧美大师| 丝袜亚洲欧美日韩综合| 最近2019年中文视频免费在线观看| 久久精品国产69国产精品亚洲| 国产精品久久久久久久久久久久久| 国产精品久久一区| 亚洲高清av在线| 国产精品久久二区| 中文国产成人精品久久一| 国精产品一区一区三区有限在线| 亚洲精品国产综合区久久久久久久| 欧美另类69精品久久久久9999| 青青青国产精品一区二区| 欧美日韩加勒比精品一区| 中文字幕成人精品久久不卡| 狠狠做深爱婷婷久久综合一区| 久久久久久久亚洲精品| 久久久久久久999| 欧美亚洲另类在线| 欧美亚洲视频一区二区| 777午夜精品福利在线观看| 国a精品视频大全| 97在线精品国自产拍中文| 久久久亚洲国产| 亚洲欧美日韩国产成人| 亚洲免费福利视频| 成人激情视频在线播放| 亚洲在线免费观看| 亚洲精品免费在线视频| 亚洲精品久久久久中文字幕欢迎你| 亚洲欧美精品在线| 亚洲一区av在线播放| 久久久国产在线视频| 国产日韩欧美在线播放| 国产精品美乳在线观看| 92看片淫黄大片看国产片| 尤物九九久久国产精品的分类|