最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS設計模式之責任鏈模式實例詳解

 更新時間:2018年02月03日 14:06:57   作者:itpinpai  
這篇文章主要介紹了JS設計模式之責任鏈模式,結合實例形式詳細分析了責任鏈模式的概念、原理、功能、使用場景及相關操作技巧,需要的朋友可以參考下

本文實例講述了JS設計模式之責任鏈模式。分享給大家供大家參考,具體如下:

責任鏈設計模式:

在責任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發(fā)出這個請求的客戶端并不知道鏈上的哪一個對象最終處理這個請求,這使得系統(tǒng)可以在不影響客戶端的情況下動態(tài)地重新組織和分配責任。

責任鏈模式涉及到的角色如下所示:

● 抽象處理者(Handler)角色:定義出一個處理請求的接口。如果需要,接口可以定義 出一個方法以設定和返回對下家的引用。這個角色通常由一個Java抽象類或者Java接口實現(xiàn)。上圖中Handler類的聚合關系給出了具體子類對下家的引用,抽象方法handleRequest()規(guī)范了子類處理請求的操作。

● 具體處理者(ConcreteHandler)角色:具體處理者接到請求后,可以選擇將請求處理掉,或者將請求傳給下家。由于具體處理者持有對下家的引用,因此,如果需要,具體處理者可以訪問下家。

在JS(ES6之前)中嚴格意義上是沒有extends繼承概念,所以以下代碼沒有模擬抽象類,代碼中只實現(xiàn)了具體處理類.

使用場景:在一個購物商城,在五一做了一個活動,所以圖書類商品根據(jù)購買的金額依次做出以下折扣方案,

1、購買滿199元,打9折
2、購買滿399元,打8折
3、購買滿599元以上,打7折;

責任鏈鏈的優(yōu)點:

請求發(fā)送者只需要知道鏈中的第一個節(jié)點,從而弱化了發(fā)送者和一組接收者之間的強聯(lián)系。如果不使用責任鏈鏈模式、根據(jù)當前價格客戶端要知道每一級打折信息,最后知道具體是那一層上打折才是符合當前價格的折扣。

function BookHandler() {
 this.calcPrice = function( price ) {
  if ( 199 > price ) {
   console.log("原價是:"+ price);
  } else {
   this.successor.calcPrice( price );
  }
 }
 this.setSuccessor = function( _successor ) {
  this.successor = _successor;
 }
}
function BookCalc9Handler( _successor ) {
 this.calcPrice = function( price ) {
  if ( 199 <= price && price < 399 ) {
   console.log("原價是:"+ price +";打9折后:" + (price * 0.9));
  } else {
   this.successor.calcPrice( price );
  }
 }
 this.setSuccessor = function( _successor ) {
  this.successor = _successor;
 }
}
function BookCalc8Handler() {
 this.calcPrice = function( price ) {
  if ( 399 <= price && price < 599 ) {
   console.log("原價是:"+ price +";打8折后:" + (price * 0.8));
  } else {
   this.successor.calcPrice( price )
  }
 }
 this.setSuccessor = function( _successor ) {
  this.successor = _successor;
 }
}
function BookCalc7Handler() {
 this.calcPrice = function( price ) {
  if ( price >= 599 ) {
   console.log("原價是:"+ price +";打7折后:" + (price * 0.7));
  } else {
   this.successor.calcPrice( price )
  }
 }
 this.setSuccessor = function( _successor ) {
  this.successor = _successor;
 }
}

客戶端 :

var price = 400;
var bookHandler = new BookHandler();
var bookCalc9Handler = new BookCalc9Handler();
var bookCalc8Handler = new BookCalc8Handler();
var bookCalc7Handler = new BookCalc7Handler();
bookHandler.setSuccessor(bookCalc9Handler);
bookCalc9Handler.setSuccessor(bookCalc8Handler);
bookCalc8Handler.setSuccessor(bookCalc7Handler);
bookHandler.calcPrice(price);

Console.log打印出來的效果:

更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript錯誤與調試技巧總結》、《JavaScript數(shù)據(jù)結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數(shù)學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

相關文章

  • python基本語法練習實例

    python基本語法練習實例

    下面小編就為大家?guī)硪黄猵ython基本語法練習實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • python實現(xiàn)馬丁策略回測3000只股票的實例代碼

    python實現(xiàn)馬丁策略回測3000只股票的實例代碼

    這篇文章主要介紹了python實現(xiàn)馬丁策略回測3000只股票,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Python調用服務接口的實例

    Python調用服務接口的實例

    今天小編就為大家分享一篇Python調用服務接口的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 詳解Vue組件動態(tài)加載有哪些方式

    詳解Vue組件動態(tài)加載有哪些方式

    動態(tài)加載組件可以顯著提高應用的性能,優(yōu)化用戶體驗,尤其是在大型應用中,合理的組件加載策略尤為重要,本文將探討幾種在Vue中實現(xiàn)組件動態(tài)加載的具體方案,需要的朋友可以參考下
    2024-10-10
  • python中判斷數(shù)字是否為質數(shù)的實例講解

    python中判斷數(shù)字是否為質數(shù)的實例講解

    在本篇文章里小編給大家分享了關于python中判斷數(shù)字是否為質數(shù)的實例講解內容,有興趣的朋友們可以學習下。
    2020-12-12
  • python清理pip包管理器的完整指南

    python清理pip包管理器的完整指南

    在?Python?開發(fā)中,pip?是最常用的包管理工具,隨著項目的不斷發(fā)展,開發(fā)者往往會在環(huán)境中安裝大量的依賴包,隨著時間的推移,這些包可能會造成環(huán)境混亂、冗余、包版本沖突等問題,本文將詳細介紹如何清理?pip?包管理器中的緩存,需要的朋友可以參考下
    2024-11-11
  • 使用Python創(chuàng)建一個文件夾結構生成器

    使用Python創(chuàng)建一個文件夾結構生成器

    這篇文章主要為大家詳細介紹了如何使用Python創(chuàng)建一個文件夾結構生成器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-01-01
  • Python中關于面向對象概念的詳細講解

    Python中關于面向對象概念的詳細講解

    要了解面向對象我們肯定需要先知道對象到底是什么玩意兒。關于對象的理解很簡單,在我們的身邊,每一種事物的存在都是一種對象??偨Y為一句話也就是:對象就是事物存在的實體
    2021-10-10
  • keras 獲取某層的輸入/輸出 tensor 尺寸操作

    keras 獲取某層的輸入/輸出 tensor 尺寸操作

    這篇文章主要介紹了keras 獲取某層的輸入/輸出 tensor 尺寸操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Pycharm如何自動生成頭文件注釋

    Pycharm如何自動生成頭文件注釋

    這篇文章主要介紹了Pycharm如何自動生成頭文件注釋,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11

最新評論

韶山市| 景宁| 台山市| 南充市| 北安市| 光泽县| 社会| 浦江县| 成武县| 秭归县| 凯里市| 扎囊县| 宁海县| 安达市| 遵化市| 西青区| 荃湾区| 宁强县| 百色市| 项城市| 桐柏县| 定陶县| 藁城市| 孟津县| 沽源县| 黄大仙区| 郁南县| 济宁市| 闸北区| 日土县| 民县| 定兴县| 尼木县| 嘉鱼县| 广东省| 商都县| 陆河县| 井陉县| 宣化县| 祁连县| 崇明县|