观察者模式 例子2

<html>
    <head></head>
    <style>
        #content,#ad,#study{
            width:200px;
            height: 100px;
            border: 1px solid black;
        }
    </style>
    <body>
        <h1>observe</h1>
        <select name="" id="">
            <option value="male">male</option>
            <option value="female">female</option>
        </select>
        <input type="button" onclick="t1()" value="观察ad">
        <input type="button" onclick="t2()" value="不观察ad">
        <div id="content">content</div>
        <div id="ad">ad</div>
    </body>
    <script>
        //select为被观察  下面内容为观察
        var sel=document.getElementsByTagName(‘select‘)[0];
        sel.observers={}
        //把观察的记录号
        sel.attach=function(key,obj){
            sel.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==‘male‘){
                this.innerHTML=‘car‘;
            }else if(observee.value=‘female‘){
                this.innerHTML=‘jianfei‘;
            }
        }
        ad.update=function (observee) {
            if(observee.value==‘male‘){
                this.innerHTML=‘male_ad‘;
            }else if(observee.value=‘female‘){
                this.innerHTML=‘female_ad‘;
            }
        }

        //让content观察select的变化
        sel.attach(‘content‘,content);
        function t1(){
            sel.attach(‘ad‘,ad);
        }
        function t2(){
            sel.detach(‘ad‘);
        }
    </script>
</html>
时间: 2024-10-06 05:17:56

观察者模式 例子2的相关文章

设计模式(行为型)之观察者模式(Observer Pattern)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 阅读前一篇<设计模式(结构型)之代理模式(Proxy Pattern)>http://blog.csdn.net/yanbober/article/details/45480965 概述 观察者模式用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作

观察者模式 -&gt; dom事件 / 自定义事件 / Promise 我的理解

观察者模式(Observer) 又称作为发布-订阅模式或消息机制,定义了一种依赖关系,解决了主体对象与观察者对象之间通讯和耦合的问题; 观察者模式例子 引用于<JavaScript设计模式> var Observer = (function(){ var _messages = {}; // 监听信息容器 return { /** * 注册监听信息接口 * @param {String} type 监听信息类型 * @param {Function} fn 对应的回调函数 */ regist:

【设计模式】HeadFirst设计模式(二):观察者(Observer)模式

一.观察者模式定义 在观察者模式中,一个被观察者管理所有依赖于它的观察者对象,它定义了一个一对多的依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新. 主题(被观察者)通过一个共同的接口来更新观察者,观察者依赖于此主题. 二.观察者模式例子--气象监测系统 描述: 气象监测系统分为三个部分:气象站(获取实际气象数据的物理装置).WeatherData对象(追踪来自气象站的数据,并更新布告板)和布告板(显示目前天气状况给用户看) 布告板分为三个:目前状况(显示Weath

重温面向对象核心 下 : 你一定能看懂的委托和事件

实例解读面向对象核心,所有例子基于 C#,涉及我们实务中最常关心的问题: 1.封装.继承.多态: 2.抽象类.接口: 3.委托.事件. 三.委托和事件 通俗的说,我们使用委托的目的是“实现将方法作为参数传递的效果”,直接结合例子说明. 我们还是用基于上次的示例往下更改. 场景设定:根据图形的不同,返回不同的面积算法. // 参数为图形形状, 返回该图形的面积计算公式 public string GetAreaAlg(string shapeName) { if (shapeName=="矩形&q

C#设计模式---观察者模式简单例子

在开发过程中经常遇到一个模块中的 一个方法调用了其他模块中相关的方法 比如说在一个系统中,如果出现了错误,就调用专门进行错误处理的模块中的方法进行错误处理 而因为错误处理的操作有很多,所以将这些具体的操作封装在其他的模块中 在专门进行错误处理的模块中调用其他模块中的错误操作方法 这样一来在主系统中只要实例化专门进行错误处理的模块对象 并调用其相关的方法,其他模块中的具体方法也都会被执行 这时专门进行错误处理的模块被称为发布者 其他拥有具体错误操作的模块称为订阅者 只要发布者一发布信息(方法被调用

[设计模式]_[观察者模式在项目中实际使用例子]

场景: 1. 比如在界面开发中,多个窗口之间需要通讯,比较常见的方法就是各个窗口之间包含对其他窗口的引用,之后在需要时通过其他窗口的引用来调用相应的函数获取相应的值: 但是这个确定还是比较明显的,就是会造成窗口之间的依赖和耦合,想想测试或变异某个窗口时另一个窗口必须是没问题的,而另一个窗口编译又依赖它,这样成了反复依赖 导致编译不过或修改其中一个另一个就得相应的该.很麻烦,不好维护. 2. 还有的不切实际的解决办法是在窗口之间发送事件,比如qt得信号或win32的消息,但是这样会造成消息的泛滥,

观察者模式(observer)之委托(delegate) c#简单例子

几个要点:模式使目标与观察都之间的依赖关系达到松耦合.通知会自动传播 例子:玩家击中敌人后发生一系列变化:发后爆炸.敌人少1个.... namespace adapterpattern { public partial class observerDelegateForm : Form { public observerDelegateForm() { InitializeComponent(); BaseData.EnemyNumber = 100; } private void btnDis

观察者模式(observer行为型)c#简单例子

几个要点:模式使目标与观察都之间的依赖关系达到松耦合.通知会自动传播 例子:玩家击中敌人后发生一系列变化:发后爆炸.敌人少1个.... namespace adapterpattern { public partial class ObserverForm : Form { public ObserverForm() { InitializeComponent(); } private void btnDisplay_Click(object sender, EventArgs e) { Bas

观察者模式及Java实现例子

http://www.cnblogs.com/mengdd/archive/2013/02/07/2908929.html 观察者模式 观察者模式 Observer 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象. 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己. 观察者模式的组成 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个