JS 之设计模式-观察者模式

HTML+JS 实现观察者模式

  • JS实现两端:服务端和客户端
  • HTML实现界面风格
    在这里插入图片描述
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>观察者模式</h1>
<select name="sel">
    <option value="man">男人风格</option>
    <option value="fel">女人风格</option>
</select>
<div id="content" style="width: 100px;height: 100px;border:1px solid gray;margin-top: 20px;">
    找一个好老婆
</div>
<div id="ad" style="width: 100px;height: 100px;border:1px solid gray; margin-top: 20px;">
    找一个有房子的老公
</div>
<br>
<input type="button" value="观察广告" onclick="t1()" /> &nbsp;&nbsp;<input type="button" value="不观察广告"  onclick="t2()"/>
<script type="text/javascript">
    //服务端(被观察者);
    var sel = document.getElementsByTagName('select')[0];
    
	//带sel是规范对象区域
    sel.observers = {};//定义对象区域;
    sel.attach = function (key, obj) {
        this.observers[key] = obj;
    };
    sel.detach = function (key) {
        delete this.observers[key];
    }
    sel.onchange = sel.notify= function () {
        for (var key in this.observers) {
            this.observers[key].update(this);
        }
    };

    //客户端(观察者)
    var content = document.getElementById('content');
    var ad = document.getElementById('ad');
    content.update = function (observee) {
        if (observee.value == 'man') {
            this.style.backgroundColor = 'gray';
        } else if (observee.value == 'fel') {
            this.style.backgroundColor = 'pink';
        }
    }
	
    ad.update = function (observee) {
        if (observee.value == 'man') {
            this.innerHTML = '汽车';
        } else if (observee.value == 'fel') {
            this.innerHTML = '化妆品';
        }
    }
    sel.attach('1', content);
    
    /**
     *
     * 后期要添加一个观察者,只需要添加一个update方法,
     * 然后监听观察者即可,代码上解除代码耦合行(JS框架)
     * 
     */
    
    var adarea=document.getElementById('ad');
    function t1() {
        sel.attach('adarea',adarea);
    }
    
    function t2() {
        sel.detach('adarea',adarea);
    }

</script>
</body>
</html>
发布了46 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/tangqing24680/article/details/99843070
今日推荐