建造者模式:
就是所谓的发布订阅模式(Publish/Subscribe)
定义一对多的模式。
·模式作用:
1.支持简单的广播通信,自动通知所有已经订阅过的对象。
2.页面载入后目标对象很容易与观察者存在一种动态关联,增加灵活性。
3.目标对象与观察者之间的抽象耦合关系能够单独扩展以及重用。
·注意事项:
1.监听在触发之前。
例子:实现 队列 触发
(function(){
let o =$({});
$.jianting=function(){
o.on.apply(o,arguments);
}
$.fabu=function(){
o.trigger.apply(o,arguments);
}
$.qingchu=function(){
o.off.apply(o,arguments)
}
})()
$.jianting('/all',function(){
...
})
$.fabu('/all',[1,2,3])
观察者模式:
分步骤构建一个复杂对象。
指挥者不关注细节,只提要求。建造者具体干活。
·模式作用:
1.分步创建一个复杂对象。
2.解耦封装过程和具体创建的组件。
3.无需关心组件如何组装
·注意事项:
1.一定要一个稳定的算法进行支持。
2.加工工艺是暴露的。
例子:$.ajax() 方法就是建造者模式。类的方式。
代理模式:
·模式作用:
1.远程代理(一个对象将不同空间的对象进行局部代理)
2.虚拟代理(根据需要创建开销很大的对象如渲染网页暂时用占位代替真图)
3.安全代理(控制真实的访问权限)
4.智能指引(调用对象代理另外一些事情如垃圾回收机制)
·注意事项:
1.不能滥用代理,有时候仅仅是给代码增加复杂度。
工厂模式:
·例子:
var XMLHttpFactiory =function(){};
// 抽象工厂模式
let XMLHttpFactory=function(){};
XMLHttpFactory.prototype={
// 如果真的要调用这个方法会抛出一个错误,它不能被实例化,只能用来派生子类
createFactory:function(){
throw new Error('this is an abstract class ')
}
}
// 派生之类 this指向
let XHRHandler=function(){
XMLHttpFactory.call(this);
}
XHRHandler.prototype=new XMLHttpFactory(); //返回prototype实例
XHRHandler.prototype.constructor=XHRHandler;//构造函数 this指向
// 实现具体方法
XHRHandler.prototype.createFactory=function(){
let XMLHttp=null;
if(window.XMLHttpRequest){
XMLHttp=new XMLHttpRequest()
}
else if(window.ActiveXObject){
XMLHttp=new ActiveXObject('Microsoft.XMLHTTP')
}
return XMLHttp;
}
// 简单工厂模式
var XMLHttpFactory=function(){};
XMLHttpFactory.createXMLHttp=function(){
var XMLHttp=null;
if(window.XMLHttpRequest){
XMLHttp=new XMLHttpRequest()
}
else if(window.ActiveXObject){
XMLHttp=new ActiveXObject('Microsoft.xmlhttp')
}
return XMLHttp;
}
var AjaxHander=function(){
var XMLHttp=XMLHttpFactory.createXMLHttp();
}