成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

js設(shè)計(jì)模式 --- 責(zé)任鏈模式

Null / 2134人閱讀

摘要:責(zé)任鏈模式責(zé)任鏈模式指的是某個(gè)請(qǐng)求需要多個(gè)對(duì)象進(jìn)行處理,從而避免請(qǐng)求的發(fā)送者和接收之間的耦合關(guān)系。介紹了這么多生活中責(zé)任鏈模式的例子的,下面具體給出面向?qū)ο笾胸?zé)任鏈模式的定義。

責(zé)任鏈模式
責(zé)任鏈模式指的是——某個(gè)請(qǐng)求需要多個(gè)對(duì)象進(jìn)行處理,從而避免請(qǐng)求的發(fā)送者和接收之間的耦合關(guān)系。將這些對(duì)象連成一條鏈子,并沿著這條鏈子傳遞該請(qǐng)求,直到有對(duì)象處理它為止。

從生活中的例子可以發(fā)現(xiàn),某個(gè)請(qǐng)求可能需要幾個(gè)人的審批,即使技術(shù)經(jīng)理審批完了,還需要上一級(jí)的審批。這樣的例子,還有公司中的請(qǐng)假,少于3天的,直屬Leader就可以批準(zhǔn),3天到7天之內(nèi)就需要項(xiàng)目經(jīng)理批準(zhǔn),多余7天的就需要技術(shù)總監(jiān)的批準(zhǔn)了。介紹了這么多生活中責(zé)任鏈模式的例子的,下面具體給出面向?qū)ο笾胸?zé)任鏈模式的定義。

責(zé)任鏈模式涉及的對(duì)象只有處理者角色,但由于有多個(gè)處理者,它們具有共同的處理請(qǐng)求的方法,所以這里抽象出一個(gè)抽象處理者角色進(jìn)行代碼復(fù)用.

實(shí)現(xiàn)

請(qǐng)求類(lèi)

// 采購(gòu)請(qǐng)求
let PurchaseRequest = function (amount, productName) {
    this.amount = amount;
    this.productName = productName;
};

處理者接口類(lèi)

// 審批人,Handler
let Approver = function (name, nextApprover) {
    this.name = name;
    this.nextApprover = nextApprover;
};
Approver.prototype.processRequest = function () {
    throw new Error();  
};

處理者類(lèi)

// ConcreteHandler
let Manager = function (name, nextApprover) {
    Approver.call(this, name, nextApprover);
};
extend(Manager, Approver);
Manager.prototype.processRequest = function (request) {
    if (request.Amount < 10000.0)
    {
        console.log("ok");
    }
    else if (NextApprover != null)
    {
        this.nextApprover.ProcessRequest(request);
    }   
};    
    
// ConcreteHandler,副總
let VicePresident = function (name, nextApprover) {
    Approver.call(this, name, nextApprover);
};
extend(VicePresident, Approver);
VicePresident.prototype.processRequest = function (request) {
    if (request.Amount < 25000.0)
    {
        console.log("ok");
    }
    else if (NextApprover != null)
    {
        this.nextApprover.ProcessRequest(request);
    }   
};


// ConcreteHandler,總經(jīng)理
let President = function (name, nextApprover) {
    Approver.call(this, name, nextApprover);
};
extend(President, Approver);
President.prototype.processRequest = function (request) {
    if (request.Amount < 100000.0)
    {
        console.log("ok");
    }
    else if (NextApprover != null)
    {
        this.nextApprover.ProcessRequest(request);
    }   
};

測(cè)試
let requestTelphone = new PurchaseRequest(4000.0, "Telphone");
let requestSoftware = new PurchaseRequest(10000.0, "Visual Studio");
let requestComputers = new PurchaseRequest(40000.0, "Computers");

let manager = new Manager("LearningHard");
let Vp = new VicePresident("Tony");
let Pre = new President("BossTom");

// 設(shè)置責(zé)任鏈
manager.NextApprover = Vp;
Vp.NextApprover = Pre;

// 處理請(qǐng)求
manager.ProcessRequest(requestTelphone);
manager.ProcessRequest(requestSoftware);
manager.ProcessRequest(requestComputers);

使用場(chǎng)景

一個(gè)系統(tǒng)的審批需要多個(gè)對(duì)象才能完成處理的情況下,例如請(qǐng)假系統(tǒng)等。

代碼中存在多個(gè)if-else語(yǔ)句的情況下,此時(shí)可以考慮使用責(zé)任鏈模式來(lái)對(duì)代碼進(jìn)行重構(gòu)。

特點(diǎn)

降低了請(qǐng)求的發(fā)送者和接收者之間的耦合。

把多個(gè)條件判定分散到各個(gè)處理類(lèi)中,使得代碼更加清晰,責(zé)任更加明確。

  責(zé)任鏈模式也具有一定的缺點(diǎn),如:

在找到正確的處理對(duì)象之前,所有的條件判定都要執(zhí)行一遍,當(dāng)責(zé)任鏈過(guò)長(zhǎng)時(shí),可能會(huì)引起性能的問(wèn)題, 可能導(dǎo)致某個(gè)請(qǐng)求不被處理。

總結(jié)

責(zé)任鏈降低了請(qǐng)求端和接收端之間的耦合,使多個(gè)對(duì)象都有機(jī)會(huì)處理某個(gè)請(qǐng)求。使得責(zé)任分割, 更具體, 有助于拓展

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/92970.html

相關(guān)文章

  • 利用責(zé)任模式設(shè)計(jì)一個(gè)攔截器

    摘要:前言近期在做的攔截器功能,正好用到了責(zé)任鏈模式。通過(guò)官方圖就可以非常清楚的看出是一個(gè)責(zé)任鏈模式用責(zé)任鏈模式設(shè)計(jì)一個(gè)攔截器對(duì)于攔截器來(lái)說(shuō)使用責(zé)任鏈模式再好不過(guò)了。設(shè)置攔截器到責(zé)任鏈中時(shí)通過(guò)反射將的值保存到各個(gè)攔截器中。 showImg(https://segmentfault.com/img/remote/1460000016756077?w=1733&h=1300); 前言 近期在做 ...

    dreamans 評(píng)論0 收藏0
  • JAVA設(shè)計(jì)模式責(zé)任模式

    摘要:責(zé)任鏈模式涉及到的角色如下所示抽象處理者角色定義一個(gè)處理請(qǐng)求的抽象類(lèi)。如果一個(gè)類(lèi)承擔(dān)了一部分責(zé)任,還將請(qǐng)求踢給下一個(gè)皮球,則被稱(chēng)為不純的責(zé)任鏈模式。一般來(lái)說(shuō),日常開(kāi)發(fā)中不純的責(zé)任鏈模式用的比較多一點(diǎn)。參考責(zé)任鏈模式更多文章 在閻宏博士的《JAVA與模式》一書(shū)中開(kāi)頭是這樣描述責(zé)任鏈(Chain of Responsibility)模式的: 責(zé)任鏈模式是一種對(duì)象的行為模式。在責(zé)任鏈模式里,...

    libxd 評(píng)論0 收藏0
  • 我的Java設(shè)計(jì)模式-責(zé)任模式

    摘要:咦這一層一層上報(bào)就涉及到這次的責(zé)任鏈模式。責(zé)任鏈模式和觀察者模式存在一個(gè)共同點(diǎn),就是傳遞責(zé)任鏈模式是一級(jí)一級(jí)的傳遞,形成一條鏈,鏈節(jié)點(diǎn)處理者之間是存在傳遞關(guān)系的。這是責(zé)任鏈模式和觀察者模式的區(qū)別,也是責(zé)任鏈模式的核心。 今天來(lái)說(shuō)說(shuō)程序員小猿和產(chǎn)品就關(guān)于需求發(fā)生的故事。前不久,小猿收到了產(chǎn)品的需求。 產(chǎn)品經(jīng)理:小猿,為了迎合大眾屌絲用戶(hù)的口味,我們要放一張圖,要露點(diǎn)的。 小猿:........

    douzifly 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<