国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-22 23:06:39
字體:
來源:轉載
供稿:網友

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

責任鏈設計模式:

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

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

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

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

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

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

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

責任鏈鏈的優點:

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

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; }}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁蒗| 古田县| 钦州市| 前郭尔| 焦作市| 黄骅市| 宁武县| 政和县| 普格县| 桐乡市| 池州市| 新丰县| 襄垣县| 清徐县| 曲周县| 呼和浩特市| 西盟| 荔波县| 吉林省| 阳城县| 临潭县| 尉氏县| 顺义区| 耒阳市| 南安市| 阳新县| 金阳县| 昆明市| 金堂县| 工布江达县| 青岛市| 平陆县| 达日县| 错那县| 曲阜市| 潮州市| 渭南市| 甘洛县| 萨迦县| 绵阳市| 崇州市|