js面向对象-设计模式-观察者模式-汇率转换

 观察者模式也叫做发布-订阅模式,这个设计模式定义了一个1对多的依赖关系。当一个对象的状态发生改变的时候,所有订阅了等等对象都会接到通知

例:汇率转换

人民币是一个发布者,当前只有人民币进行信息的发布,所有的外币,只有接收通知的功能

  • 第一步要设置初始dom
  • 人民币类,维护一个数组,内部存放的是订阅者列表的信息。然后提供相应的订阅方法subscribe便于其他的实例进行订阅,让每一个外币在实例化的时候,顺便将自己维护到人民币的数组中
  • 外币写一个listen方法,用来订阅rmb发布的信息,rmb设置监听的事件,作用就是用来发布信息的
<body>
    <div id="box"></div>
</body>
</html>
<script src="jQuery.min.js"></script>
<script>
    //RMB类
    function RMB() {
        //创建上树
        this.$dom = $("<div><span>RMB:</span><input type='text'></div>")
        $("#box").append(this.$dom);
        //维护订阅者的数组
        this.subscribers = [];
        //初始化发布消息
        this.bindEvent();
    }
    //RMB  订阅者维护到数组里
    RMB.prototype.subscriber = function (o) {
        this.subscribers.push(o);
    }
    //RMB 给每一个订阅者发布消息
    RMB.prototype.bindEvent = function () {
        //备份this
        var self = this;
        this.$dom.find("input").bind("input",function () {
            //发布消息
            for(var i = 0;i< self.subscribers.length;i++){
                //给每一个订阅者发布消息,内容为 发布者rmb实时输入的val
                self.subscribers[i].listen($(this).val());
            }
        })
    }
    //外币类
    function ForeignCurrency(title,rate) {
        //币种汇率
        this.title= title;
        this.rate = rate;
        //创建节点 上树
        this.$dom = $("<div><span>"+this.title+"</span><input type='text' disabled/></div>")
        $("#box").append(this.$dom);
        //订阅人民币
        rmb.subscriber(this);
    }
    //外币收听方法  接收RMB发布的消息
    ForeignCurrency.prototype.listen = function (val) {
        var ret = val / this.rate;
        this.$dom.find("input").val(ret);
    }
    var rmb = new RMB()
    new ForeignCurrency("美元", '6.5');
    new ForeignCurrency("英镑", '8.7');
    new ForeignCurrency("日元", '0.063');
    new ForeignCurrency("韩元", '0.0058');
</script>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值