用TypeScript实现 观察者 模式

观察者模式:主题发生任何变化观察者都将能知道
简单实现:创建主题,让主题维护观察者列表,一旦主题发生变化就通知所有的观察者。
export class Subject {
  private listeners: any[];
  constructor() {
    this.listeners = [];
  }
  private addListener(listener): void {
    this.listeners.push(listener);
  }
  private removeListener(listener): void {
    const index = this.listeners.indexOf(listener);
    this.listeners.splice(index, 1);
  }
  private notify(message: any): void {
    this.listeners.forEach(listener => listener.update(message));
  }
  private startOfWork(): void {
    this.notify('开始工作了!');
  }
  private doingWork(): void {
    this.notify('我正在努力工作!');
  }
  private endOfWork(): void {
    this.notify('工作完成!');
  }
  add(listener: any): void {
    this.addListener(listener);
  }
  remove(listener: any): void {
    this.removeListener(listener);
  }
  doWork(): void {
    this.startOfWork();
    this.doingWork();
    this.endOfWork();
  }
}
ngOnInit(): void {
   this.observePattern();
}
observePattern(): void {
   const Observer1 = {
     update: message => {
       console.log('Observer1 received:', message);
     }
   };
   const Observer2 = {
     update: message => {
       console.log('Observer2 received:', message);
     }
   };
   const subject = new Subject();
   subject.add(Observer1);
   subject.add(Observer2);
   subject.doWork();
}
结果执行结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanghaoyuan.sh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值