观察者模式js讲解实例(转)

来源:互联网 发布:python scikit神经网络 编辑:程序博客网 时间:2024/04/30 05:30

说说我自己对这模式的理解,其思想核心是:每个被观察对象都依据对象数据的改变而改变,被观察对象一定要有同样的改变行为来约束,这个约束是被观察对象提供给观察器的统一接口。观察器会开发改变数据的行为。

 

JS是弱类型的脚本,很多东西都要约定的,不象.NET会有接口的约束,废话不多说,我们直接看实例:

观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者实例

 1观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空var ObserverObj = 观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{  /**//*依赖对象*/

 2观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    FirstName: "Max",

 3观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    LastName: "Gan",

 4观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    Id: 1

 5观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空}

 6观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空

 7观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空var ObserverManager = 观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{ /**//*观察器*/

 8观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    Observers:[], /**//*观察对象集*/

 9观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    AddObserver: function(item)观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{/**//*加入观察对象*/

10观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空        this.Observers.push(item);

11观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    },

12观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    Change: function(obj)观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{  /**//*改变对象行为*/

13观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空        for(var item in obj)观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{

14观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空            ObserverObj[item] = obj[item];

15观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空        }//改变数据依赖对象数据

16观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空        for(var i = 0,len = this.Observers.length; i < len; i++)观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{

17观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空            var item = this.Observers[i];

18观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空            item.Display();        //对象改变后,改变观察对象的行为Display; 为统一的接口

19观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空        }

20观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    }

21观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空}

22观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空

23观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空var Header = function()观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{    /**//*观察对象Header*/

24观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    this.Display = function()观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{

25观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空        alert(ObserverObj.FirstName);

26观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    }

27观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空}

28观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空

29观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空var Content = function()观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{    /**//*观察对象Content*/

30观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    this.Display = function()观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{

31观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空        alert(ObserverObj.LastName);

32观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    }

33观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空}

34观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空

35观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空var Foot = function()观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{    /**//*观察对象Foot*/

36观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    this.Display = function()观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空{

37观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空        alert(ObserverObj.Id);

38观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空    }

39观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空}

 上面的例子ObserverManager只提供了绑定的方法(AddObserver),其他的什么取消绑定啊之类的代码技巧,可能大家想一下就知道了.其实这些代码的最终目的就是当改变了Observers数据,其他的被对象也会根据数据的改变作出相应的回应.OK,现在我们把他们绑定一下.

/***绑定观察器动作***/

ObserverManager.AddObserver(new Header());

ObserverManager.AddObserver(new Content());

ObserverManager.AddObserver(new Foot());

 最后我们使用会怎么使用呢?(一个低能的问题...呵呵)看例子.

观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空观察者模式js讲解实例(转) - 红叶-蔚蓝天空 - 蔚蓝天空使用方法

1 <!--使用方法-->

2 <a href="javascript://" onclick="ObserverManager.Change({FirstName:'老婆'});">改变FirstName</a>

3 <a href="javascript://" onclick="ObserverManager.Change({LastName:'是母老虎'});">改变LastName</a>

4 <a href="javascript://" onclick="ObserverManager.Change({Id:2});">改变Id</a>

原创粉丝点击