Typescript責任鏈模式(模擬推送消息處理)

chain-of-responsibility.png

環(huán)境:WebStorm
語言:TypeScript

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

優(yōu)點:

  • 可以控制處理流程阎抒,處理器的位置可以根據(jù)需要進行快速更改
  • 單一職責蜘醋,每個處理器只會處理與自己想干的內容
  • 開閉原則,在不破壞原有代碼結構的情況下症虑,添加上新的處理器處理新流程

缺點:

  • 處理流程是一對一的關系连霉,一個消息只能給一個處理器處理,那么就意味著佛呻,有可能一些消息根本無法到達一些處理器的處理邏輯中裳朋。
interface Handler {
    setNext(handler:Handler):Handler;
    handle(request:string):string;

}

abstract class AbstractHandler implements Handler{

    //下一個處理對象
    private nextHandler:Handler;

    handle(request: string): string {
        //是否存在下一個對象?是就處理
        if (this.nextHandler) {
            return this.nextHandler.handle(request);
        }
        return null;
    }

    setNext(handler: Handler): Handler {
        this.nextHandler = handler;
        return handler;
    }

}


class _900PushHandler extends AbstractHandler{

    handle(request: string): string {
        if (request === '900') {
            return `900詳情推送處理器:這個推送我處理了吓著,推送號段:${request}`
        }
        return super.handle(request);
    }
}

class _3000PushHandler extends AbstractHandler{

    handle(request: string): string {
        if (request === '3000') {
            return `3000第三方任務推送處理器:這個推送我處理了鲤嫡,推送號段:${request}`
        }
        return super.handle(request);
    }
}

class _3001PushHandler extends AbstractHandler{

    handle(request: string): string {
        if (request === '3001') {
            return `3001搶單任務推送處理器:這個推送我處理了,推送號段:${request}`
        }
        return super.handle(request);
    }
}

/**
 * 模擬推送服務發(fā)送消息
 */
function receiverHandler(handler:Handler) {
    const pushCodes = ['3000','900','700'];
    for (const pushCode of pushCodes) {
        console.log(`發(fā)送一個推送消息绑莺,號段是: ${pushCode}`);
        const result  = handler.handle(pushCode);

        if (result) {
            console.log(` 推送消息給處理了 ${result}`);

        }else {
            console.log(` 這個推送號段沒有人處理: ${pushCode}`);

        }
    }
}

const _m900PushHandler = new _900PushHandler();
const _m3000PushHandler = new _3000PushHandler();
const _m3001PushHandler = new _3001PushHandler();

//責任鏈模式:鏈接處理器
_m900PushHandler.setNext(_m3000PushHandler).setNext(_m3001PushHandler);

//推送服務器暖眼,選擇一個鏈的節(jié)點,進行推送消息
receiverHandler(_m900PushHandler);

輸出結果

C:\Users\Aniu\Desktop\github_advanced>node ChainofResponsibility.js
發(fā)送一個推送消息纺裁,號段是: 3000
 推送消息給處理了 3000第三方任務推送處理器:這個推送我處理了诫肠,推送號段:3000
發(fā)送一個推送消息司澎,號段是: 900
 推送消息給處理了 900詳情推送處理器:這個推送我處理了,推送號段:900
發(fā)送一個推送消息栋豫,號段是: 700
 這個推送號段沒有人處理: 700

TypeScript讓JS代碼寫的跟Kotlin似的挤安,相似真的高。我認真對比了一下官網上的demo丧鸯,一個帶泛型的方法蛤铜,區(qū)別竟然就是一個關鍵字fun與function,Kotlin中是fun骡送,TypeScript 則延續(xù)了JS中的方法關鍵字function昂羡,都是新時代的語言,也許這些都可以理解為“新”特性吧摔踱。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末虐先,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子派敷,更是在濱河造成了極大的恐慌蛹批,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篮愉,死亡現(xiàn)場離奇詭異腐芍,居然都是意外死亡,警方通過查閱死者的電腦和手機试躏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門猪勇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颠蕴,你說我怎么就攤上這事泣刹。” “怎么了犀被?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵椅您,是天一觀的道長。 經常有香客問我寡键,道長掀泳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任西轩,我火速辦了婚禮员舵,結果婚禮上,老公的妹妹穿的比我還像新娘藕畔。我一直安慰自己固灵,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布劫流。 她就那樣靜靜地躺著巫玻,像睡著了一般丛忆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仍秤,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天熄诡,我揣著相機與錄音,去河邊找鬼诗力。 笑死凰浮,一個胖子當著我的面吹牛,可吹牛的內容都是我干的苇本。 我是一名探鬼主播袜茧,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓣窄!你這毒婦竟也來了笛厦?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤俺夕,失蹤者是張志新(化名)和其女友劉穎裳凸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劝贸,經...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡姨谷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了映九。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梦湘。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖件甥,靈堂內的尸體忽然破棺而出捌议,到底是詐尸還是另有隱情,我是刑警寧澤嚼蚀,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站管挟,受9級特大地震影響轿曙,放射性物質發(fā)生泄漏。R本人自食惡果不足惜僻孝,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一导帝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧穿铆,春花似錦您单、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽平酿。三九已至,卻和暖如春悦陋,著一層夾襖步出監(jiān)牢的瞬間蜈彼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工俺驶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幸逆,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓暮现,卻偏偏與公主長得像还绘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子栖袋,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內容

  • 概要 64學時 3.5學分 章節(jié)安排 電子商務網站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,157評論 0 3
  • 一拍顷、什么是 TypeScript? 百度解釋:TypeScript是一種由微軟開發(fā)的自由和開源的編程語言栋荸。它是Ja...
    wave浪兒閱讀 2,205評論 1 20
  • 單例模式 適用場景:可能會在場景中使用到對象菇怀,但只有一個實例,加載時并不主動創(chuàng)建晌块,需要時才創(chuàng)建 最常見的單例模式爱沟,...
    Obeing閱讀 2,058評論 1 10
  • HTML HTML5標簽 媒體查詢head部分寫法 Doctype作用? 嚴格模式與混雜模式如何區(qū)分?它們有何意義...
    Mayo_閱讀 640評論 0 8
  • 針對7種欲望寫文案 傲慢匆背,妒忌呼伸,暴怒,貪食钝尸,貪婪括享,色欲,懶惰 掃地機器人 你會忘記掃地珍促,但請別忘了它铃辖。--- 懶惰...
    細穎閱讀 243評論 0 0