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

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