美文网首页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责任链模式(模拟推送消息处理)

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