代码改变世界

js之观察者模式

2017-02-27 10:17  muamaker  阅读(335)  评论(0编辑  收藏  举报

1.观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。

 

2.OO原则:为交互对象之间的松耦合设计而努力。

  松耦合的设计之所以能让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的互相依赖降到了最低。观察者模式提供了一种对象设计,让主题和观察者之间松耦合。当两个对象之间松耦合,它们依然可以交互,但是不太清楚彼此的细节。

 

3.文件结构

 

4.index.html文件下面

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		
	</body>
	<script type="text/javascript" src="js/require.js" data-main = "js/index"></script>
</html>

 5.index.js文件

require([
	"./coms1",
	"./coms2",
	"./engine"
],function(coms1,coms2,engine){
	
	
	engine.register(coms1);
	engine.register(coms2);
	
	coms1.createNew(engine);
	coms2.createNew(engine);
	
});

6.engine.js

define([],function(){
	
	var comList = [];
	
	return {
		register:function(com){
			comList.push(com);
		},
		upData:function(Msg){
			this.send(Msg);
		},
		send:function(Msg){
			for(var i = 0; i < comList.length; i++){
				comList[i].watch(Msg);
			}
		}
	}
});

7. coms1.js

define([],function(){
	
	
	return {
		createNew:function(engine){
			engine.upData("coms1");
		},
		watch:function(Msg){
			console.log(Msg);	
		}
	}
});

8.coms2.js

define([],function(){
		
	return {
		createNew:function(engine){
			engine.upData("coms2");
		},
		watch:function(Msg){
			console.log(Msg);
		}
	}
});

9.运行index.html,控制太输出

  

  

 

10.总结:观察者模式,降低组件之间的耦合,又可以让组件之间进行通信,每个组件,必须注册到引擎当中,才能参与通信,引擎会收到所有注册的组件的消息,再转发给所有的组件,达到组件之间通信的效果