js设计模式5 Mediator Pattern

学习这章之前先学习一下 call和apply:

function add(a,b){
  	alert(a+b);	
  }
  function sub(a,b){
  	alert(a-b);	
  }
  add.call(sub,1,4);//用add来代替sub
function Animal(str){
  	this.name = str;
  	this.showName = function(){
  		alert(this.name);	
  	}
  }
  function Cat(str){
  	this.name = str;
  }
  var a = new Animal("animal");
  var c = new Cat("cat");
  a.showName.call(c);//输出cat cat没有showName  
  //apply和call类似 但apply的参数得是数组
  //animal.showName.apply(cat,[]);
//利用call 和apply 可以实现继承和多继承
  function Animal2(){
  	this.eat = function(){
  		alert("eat");	
  	}	
  }
  function Animal3(){
  	this.drink = function(){
  		alert("drink");	
  	}	
  }
  function Dog(){
  	Animal2.call(this);
  	Animal3.call(this);	
  }
  var dog = new Dog();
  dog.eat();//"eat"
  dog.drink();//"drink" 另一种继承的方法是 var dog = Object.create(ANimal2);
了解了call和apply的用途之后 来实现基本的mediator pattern:
var mediator = (function(){
  	var topics = {};
  	var subscribe = function(topic,func){
  		if(!topics[topic]){
  			topics[topic] = [];
  		}	
  		topics[topic].push({"context":this,"callback":func});
  		return this;
  	}	
  	var publish = function(topic){
  		var args;
  		if(!topics[topic]){
  			return false;
  		}
  		args = Array.prototype.slice.call(arguments,1);
  		for(var i=0;i<topics[topic].length;i++){
  			var subscription = topics[topic][i];
  			subscription.callback.apply(subscription.context,args);	
  		}
  	}
  	return{
  		Publish:publish,
  		Subscribe:subscribe,
  		installTo:function(p){
  			p.Publish = publish;
  			p.Subscribe = subscribe;
  		}
  	}
  })();
  
  function test1(){
  	alert(this.toString()+1);	
  }
  function test2(){
  	alert(this.toString()+2);
  }
  mediator.Subscribe("hehe1",test1);
  mediator.Subscribe("hehe2",test2);
  mediator.Publish("hehe2");




















你可能感兴趣的:(js设计模式5 Mediator Pattern)