美文网首页Learning TypescriptTypeScript基础Typescript设计模式
TypeScript责任链模式(模拟推送消息处理)

TypeScript责任链模式(模拟推送消息处理)

作者: 做实事的人 | 来源:发表于2019-07-20 00:52 被阅读35次
chain-of-responsibility.png

环境:WebStorm
语言:TypeScript

责任链优缺点:

优点:

  • 可以控制处理流程,处理器的位置可以根据需要进行快速更改
  • 单一职责,每个处理器只会处理与自己想干的内容
  • 开闭原则,在不破坏原有代码结构的情况下,添加上新的处理器处理新流程

缺点:

  • 处理流程是一对一的关系,一个消息只能给一个处理器处理,那么就意味着,有可能一些消息根本无法到达一些处理器的处理逻辑中。
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);
    }
}

/**
 * 模拟推送服务发送消息
 */
function receiverHandler(handler:Handler) {
    const pushCodes = ['3000','900','700'];
    for (const pushCode of pushCodes) {
        console.log(`发送一个推送消息,号段是: ${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);

//推送服务器,选择一个链的节点,进行推送消息
receiverHandler(_m900PushHandler);

输出结果

C:\Users\Aniu\Desktop\github_advanced>node ChainofResponsibility.js
发送一个推送消息,号段是: 3000
 推送消息给处理了 3000第三方任务推送处理器:这个推送我处理了,推送号段:3000
发送一个推送消息,号段是: 900
 推送消息给处理了 900详情推送处理器:这个推送我处理了,推送号段:900
发送一个推送消息,号段是: 700
 这个推送号段没有人处理: 700

TypeScript让JS代码写的跟Kotlin似的,相似真的高。我认真对比了一下官网上的demo,一个带泛型的方法,区别竟然就是一个关键字fun与function,Kotlin中是fun,TypeScript 则延续了JS中的方法关键字function,都是新时代的语言,也许这些都可以理解为“新”特性吧。

相关文章

  • TypeScript责任链模式(模拟推送消息处理)

    环境:WebStorm语言:TypeScript 责任链优缺点: 优点: 可以控制处理流程,处理器的位置可以根据需...

  • 设计模式(十五):责任链模式

    责任链模式(Chain of Responsibility Pattern) 责任链模式将处理请求的对象连成一条链...

  • 责任链模式及OkHttp中的实现

    责任链模式及OkHttp中的实现 责任链模式 责任链模式是对一个事件的处理方法,所有能对事件进行处理的对象按顺序形...

  • 设计模式学习_03责任链模式

    1、责任链模式介绍: 责任链模式是行为型设计模式之一; 2、责任链模式的定义: 使多个对象都有机会处理请求, 从而...

  • 以五种模式详解 Okhttp 的责任链模式 + 源码分析

    责任链模式 采用责任链模式,意思是用来处理相关事务责任的一条执行链,链上拥有若干节点,,如果某个节点处理完了就可以...

  • S17. 责任链模式

    责任链模式 责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求...

  • Java设计模式系列-责任链模式

    原创文章,转载请标注出处:《Java设计模式系列-责任链模式》 一、概述 职责链模式(称责任链模式)将请求的处理对...

  • 责任链模式

    责任链模式的定义与特点 责任链(Chain of Responsibility)模式:使多个对象都有机会处理请求,...

  • 责任链模式

    1、责任链模式定义: 当有请求处理时,可将请求沿着链路传递,直到有对象处理为止。 2、责任链模式优点: 每个类单一...

  • 责任链模式与 OkHttp

    什么是责任链模式 OkHttp中责任链模式的实现 一、什么是责任链模式 使多个对象都有机会处理请求,从而避免了请求...

网友评论

    本文标题:TypeScript责任链模式(模拟推送消息处理)

    本文链接:https://www.haomeiwen.com/subject/loaelctx.html