Learning TypescriptTypeScript基础Typescript设计模式

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

2019-07-20  本文已影响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,都是新时代的语言,也许这些都可以理解为“新”特性吧。

上一篇下一篇

猜你喜欢

热点阅读