设计模式 - 观察者模式

Posted web半晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 - 观察者模式相关的知识,希望对你有一定的参考价值。

// 有一家猎人工会,
// 其中每个猎人都具有发布任务 (publish) ,
// 订阅任务 (subscribe) 的功能
// 他们都有一个订阅列表来记录谁订阅了自己
// 定义一个猎人类
// 包括姓名,级别,订阅列表

function Hunter(name, level) {
	this.name = name;
	this.level = level;
	this.list = [];
};

// 在 Hunter 原型上添加 publish 方法
Hunter.prototype.publish = function(money) {
	console.log(this.level + '猎人' + this.name + '寻求帮助');
	this.list.forEach(function(item, index) {
		item(money);
	});
};

// 在 Hunter 原型上添加 subscribe 方法
Hunter.prototype.subscribe = function(targrt, fn) {
	console.log(this.level + '猎人' + this.name + '订阅了' + targrt.name);
	targrt.list.push(fn);
};

// 猎人工会走来了几个猎人
let hunterMing = new Hunter('小明', '黄金');
let hunterJin = new Hunter('小金', '白银');
let hunterZhang = new Hunter('小张', '黄金');
let hunterPeter = new Hunter(' Peter ', '青铜');

// Peter 等级较低,
// 可能需要帮助,
// 所以小明,小金,小张都订阅了 Peter
hunterMing.subscribe(hunterPeter, function(money) {
	console.log('小明表示:' + (money > 200 ? '' : '暂时很忙,不能给予帮助'));
});

hunterJin.subscribe(hunterPeter, function() {
	console.log('小金表示:给予帮助');
});

hunterZhang.subscribe(hunterPeter, function() {
	console.log('小金表示:给予帮助');
});

// Peter 遇到困难,赏金 198 寻求帮助
hunterPeter.publish(198);

以上是关于设计模式 - 观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

Java设计模式补充:回调模式事件监听器模式观察者模式(转)

设计模式观察者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

观察者模式

未调用 LiveData 观察者

设计模式之美(c++)-笔记-56-观察者模式

设计模式之美(c++)-笔记-56-观察者模式