工厂方法模式
前言
前面的简单工厂模式不再适用创建多类对象,所以就有了工厂方法模式,通地工厂方法模式可以轻松创建多个类的实例对象,这样工厂方法对象在创建对象的方式也避免了使用者与对象类之间的耦合,用户不必关心创建该对象的具体类,只需调用工厂函数方法即可。
<div id="container"></div>
var Factory = function(type, content){
debugger
if(this instanceof Factory){
var s = new this[type](content);
return s;
}else{
return new Factory(type,content);
}
}
Factory.prototype = {
Java:function(content){
this.content = content;
(function(){
var div = document.createElement('div');
div.innerHTML = content;
div.style.background = 'red';
document.getElementById('container').appendChild(div);
})(content)
},
Php:function(content){
this.content = content;
(function(){
var div = document.createElement('div');
div.innerHTML = content;
div.style.color = 'yellow';
document.getElementById('container').appendChild(div);
})(content)
}
};
var data = [
{type:'Java',content:'Java是门好语言'},
{type:'Php',content:'PHP是世界上最好的语言'}
]
for(var i=data.length-1; i>=0; i--){
console.log(i)
Factory(data[i].type,data[i].content);
}
总结
工厂模式可以看作是一个实例化对象的工厂类,在工厂类内部通过安全模式(即检测对象是否为工厂函数的实例)防止因误操作导致的this指向问题,如果判断为是则直接调用,工厂函数的原型方法,判断为否则实例化工厂函数。在工厂原型中创建数据对象的基类。