JS实现观察者模式

2015-03-15 22:19 阅读 6,180 views 次 评论 0 条
<!DOCTYPE HTML>
<html>
 <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>观察者模式</title>
    <style type="text/css" media="all">
        #sec{
            margin:20px;
        }
        #cont,#ad,#study{
            width:400px;
            height:200px;
            margin:10px;
            border:1px solid #ccc;
        }
    </style>
    
 </head>
 <body>
    <div class='container'>
        <select name="" id="sec">
            <option value='male'>男性</option>
            <option value='famale'>女性</option>
        </select>
        &nbsp;
        <input type='button' value='观察尾部' onclick='t1()' />
        <input type='button' value='不观察尾部' onclick='t2()' />
        <div id='cont'>这里是内容</div>
        <div id='ad'>这里是广告</div>
        <div id='study'>这里是学习</div>
    </div>
 </body>
    <script type="text/javascript" charset="utf-8">
        var sec = document.getElementById('sec');
        var ad = document.getElementById('ad');
        var cont = document.getElementById('cont');
        var study = document.getElementById('study');
       sec.observers = {};
       sec.attach = function(key,obj){
           this.observers[key] = obj;
       }
       sec.detach = function(key){
           delete sec.observers[key];
       }
       sec.onchange = sec.notify = function(){
           for(var key in this.observers){
               this.observers[key].update(this);
           }
       }
       cont.update = function(observer){
           if (observer.value=='male')
           {
               this.style.backgroundColor = 'gray';
           }else if (observer.value=='famale'){
               this.style.backgroundColor = 'pink';
           }
       }
       ad.update = function(observer){
           if (observer.value=='male')
           {
               this.innerHTML = '汽车';
           }else if (observer.value=='famale'){
               this.innerHTML = '减肥';
           }
       }
       study.update = function(observer){
           if (observer.value=='male')
           {
               this.innerHTML = '电脑';
           }else if (observer.value=='famale'){
               this.innerHTML = '化妆';
           }
       }
       // 监听
       sec.attach('cont',cont);
       sec.attach('ad',ad);
       sec.attach('study',study);
       function t1(){
           // 观察尾部
           sec.attach('study',study);
       }
       function t2(){
           // 不观察尾部
           sec.detach('study');
       }
   </script>
</html>

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:JS实现观察者模式 | 日常开发记录
分类:JS 标签:

发表评论


表情