Typescript 职责链模式(Chain of Responsibility)
请仔细阅读下面代码,理解其中的设计理念。
职责链模式
职责链模式: 职责链模式是用来消除消息的请求者和处理者之间的耦合的模式,尤其是在处理者有多个的情况下。
实际场景
逛淘宝我们时常可以看到消费满多少立减多少,满的多减的多。
这种根据用户消费的情况有不同的打折机制就会用到职责链模式来解除消息发送者和处理者之间的耦合。
职责链模式的结构
- Sender: 消息的发送者
- Handler的抽象类: 处理者的抽象类或接口
- Handler: 各种处理者们
职责链模式的例子
现在有商场打折如下
普通折扣: 消费不满100元,不打折
黄金折扣: 消费满100元,打9折
铂金折扣: 消费满500元,打8折
钻石折扣: 消费满1000元,打7折
我们用职责链模式
先定义抽象类
/* handler-abstract-class.ts */
export abstract class HandlerAbstractClass {
protected name: string;
protected higherLevel: HandlerAbstractClass;
constructor (name: string) {
this.name = name;
}
public setHigherLevel (higherLever: HandlerAbstractClass) {
this.higherLevel = higherLever;
}
public abstract handlerMessage (money: number)
}
定义几个等级
/* level-1.ts */
import { HandlerAbstractClass } from './handler-abstract-class';
export class Level1 extends HandlerAbstractClass {
public handlerMessage(money: number) {
if (money < 100) {
console.log(`您消费${money}元,当前折扣为${this.name}折扣,还需支付${money}元`);
} else {
this.higherLevel.handlerMessage(money);
}
}
}
/* level-2.ts */
import { HandlerAbstractClass } from './handler-abstract-class';
export class Level2 extends HandlerAbstractClass {
public handlerMessage(money: number) {
if (money < 500) {
console.log(`您消费${money}元,当前折扣为${this.name}折扣,还需支付${money * 0.8}元`);
} else {
this.higherLevel.handlerMessage(money);
}
}
}
/* level-3.ts */
import { HandlerAbstractClass } from './handler-abstract-class';
export class Level3 extends HandlerAbstractClass {
public handlerMessage (money: number) {
if (money < 1000) {
console.log(`您消费${money}元,当前折扣为${this.name}折扣,还需支付${money * 0.7}元`);
} else {
this.higherLevel.handlerMessage(money);
}
}
}
/* level-4.ts */
import { HandlerAbstractClass } from './handler-abstract-class';
export class Level4 extends HandlerAbstractClass {
public handlerMessage(money: number) {
console.log(`您消费${money}元,当前折扣为${this.name}折扣,还需支付${money * 0.6}元`