加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
20-观察者设计模式.html 2.03 KB
一键复制 编辑 原始数据 按行查看 历史
wangcai 提交于 2023-04-04 16:49 . xx‘
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="box"></div>
<script src='js/jquery-3.2.1.min.js'></script>
<script>
// 观察者设计模式 基于发布订阅
// 观察者 Foreign
// 被观察者 RMB 需要保存观察者
// 人民币类
function RMB() {
// 创建人民币输入框的dom
this.$dom = $("<div><span>人民币:</span><input type='text'/></div>");
// 追加节点
$("#box").append(this.$dom)
// 保存了观察者(订阅者)
// 在被观察者中保存了所有观察者
this.subscribes = [];
// 初始化监听
this.bindEvent();
}
RMB.prototype.subscribe = function (obj) {
this.subscribes.push(obj)
}
RMB.prototype.bindEvent = function () {
let that = this;
this.$dom.find("input").bind("input", function () {
// 通知所有的观察者重新计算
for (let i = 0; i < that.subscribes.length; i++) {
that.subscribes[i].update($(this).val());
}
})
}
var rmb = new RMB()
// 外币类
function Foreign(title, rate) {
this.title = title;
this.rate = rate;
// 外币的dom
this.$dom = $("<div><span>" + this.title +
":</span><input disabled type='text'/></div>");
$("#box").append(this.$dom);
rmb.subscribe(this)
}
Foreign.prototype.update = function (val) {
let res = val / this.rate;
this.$dom.find("input").val(res)
}
new Foreign("美元", '6.5');
new Foreign("英镑", '8.7');
new Foreign("日元", '0.063');
new Foreign("韩元", '0.0058');
</script>
</body>
</html>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化