1 Star 1 Fork 1

MrMriacle/ts_design_mode

forked from 驯鹿者/ts_design_mode 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
observer.ts 1.73 KB
一键复制 编辑 原始数据 按行查看 历史
404_already_found 提交于 2019-05-23 20:44 +08:00 . update
// 发布类
class Subject {
// 缓存列表,用以存放回调函数,以便通知订阅者
private observers: Observer[] = new Array<Observer>();
private state: number;
// 新增订阅者
public subscribe(observer: Observer): void {
this.observers.push(observer);
}
// 改变状态,通知订阅者
public setState(state: number): void {
console.log(`Warning: State changed: ${state}`);
this.state = state;
this.publish();
}
// 获取状态
public getState(): number {
return this.state;
}
// 发布事件
public publish(): void {
for (let observer of this.observers) {
observer.update();
}
}
// 取消订阅
public unsubscribe(observer?: Observer): void {
// 如果没传参数,则清空订阅者
if (!observer) {
this.observers = new Array<Observer>();
} else {
this.observers.splice(this.observers.indexOf(observer), 1);
}
}
}
// 订阅者抽象类
abstract class Observer {
// 订阅的内容
protected subject: Subject;
// 订阅更新
public abstract update(): void;
}
class AObserver extends Observer {
// 构造方法里订阅
public constructor(subject: Subject) {
super();
this.subject = subject;
this.subject.subscribe(this);
}
public update() {
console.log(`AObserver: ${this.subject.getState()}`);
}
}
class BObserver extends Observer {
// 构造方法里订阅
public constructor(subject: Subject) {
super();
this.subject = subject;
this.subject.subscribe(this);
}
public update() {
console.log(`BObserver: ${this.subject.getState()}`);
}
}
const subject = new Subject();
const aObserver = new AObserver(subject);
const bObserver = new BObserver(subject);
subject.setState(1);
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/mrmriacle/ts_design_mode.git
git@gitee.com:mrmriacle/ts_design_mode.git
mrmriacle
ts_design_mode
ts_design_mode
master

搜索帮助