一、简单工厂模式
功能:使多个相似的类得到封装,传入对应的参数就能获得对应的结果。
做法:将多个相似的类中相似的属性和方法抽象封装起来,不相似的针对性处理。在方法中创建一个对象,最终返回这个对象
function createPop(type, text) {
var obj = new Object(); // 创建新对象
obj.content = text;
obj.show = function() {
console.log(obj.operate)
}
// 针对性处理
if(type == 'alert') {
obj.operate = '警告框'
}
if(type == 'comfirm') {
obj.operate = '确认框'
}
return obj; //返回新对象
}
var userAlert = createPop('alert', '警告警告');
userAlert.show();
二、安全的工厂方法
功能:避免没使用new创建实例时出错,创建多个类的实例对象。
做法:在类中判断调用时this是否属于该类,若不是则创建该类实例。在类的原型中创建所有数据对象的类。
// 安全模式创建的工厂类(避免没使用new创建实例时出错)
var Factory = function(type, content) {
if(this instanceof Factory) {
var s = new this[type](content);
} else {
return new Factory(type, content);
}
}
Factory.prototype = {
Java: function(content) {
this.content = content;
(function(content) {
var div = document.createElement('div');
div.innerHTML = content;
div.style.background = 'pink';
document.getElementById('content').appendChild(div);
}(content))
},
Php: function(content) {
this.content = content;
(function(content) {
var div = document.createElement('div');
div.innerHTML = content;
div.style.background = 'yellow';
document.getElementById('content').appendChild(div);
}(content))
}
}
Factory('Java', 'Java');
Factory('Php', 'Php');
var data = [
{type:'Java',content:'Java哪家强'},
{type:'Php',content:'Php哪家强'}
]
for(var i = 0, l = data.length; i < l; i++) {
Factory(data[i].type, data[i].content);
}