成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

Null / 2110人閱讀

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

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

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

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

實(shí)現(xiàn)

請求類

// 采購請求
let PurchaseRequest = function (amount, productName) {
    this.amount = amount;
    this.productName = productName;
};

處理者接口類

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

處理者類

// 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);
    }   
};

測試
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;

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

使用場景

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

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

特點(diǎn)

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

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

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

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

總結(jié)

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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92970.html

相關(guān)文章

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

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

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

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

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

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

    douzifly 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<