工厂方法模式
通过对产品类的抽象使其创建业务主要负责用于多类产品的实例。
安全模式类
安全模式类是说可以屏蔽错误的使用类而造成的错误。
比如对于一个类的创建,实例化一个对象需要 new
关键字,但是你的合作者可能不知道这是一个类,那么在使用的时候可能忘记加new
关键字。如下:
var Demo = function () {
};
Demo.prototype = {
show: function () {
console.log("成功获取!");
}
}
var d = new Demo();
d.show();//成功获取!
var d = Demo();
d.show();//Uncaught TypeError: Cannot read property 'show' of undefined
安全模式就是为了解决这个问题。如下:
var Demo = function () {
if (!(this instanceof Demo)) {
return new Demo();
}
}
Demo.prototype = {
show: function () {
console.log("成功获取!");
}
}
var d = Demo();
d.show();//成功获取!
安全的工厂方法
//安全模式创建的工厂类
var Factory = function (type, content) {
if (this instanceof Factory) {
var s = new this[type](content);
return s;
} else {
return new Factory(type, content);
}
}
//工厂原型中设置创建所有类型数据对象的基类
Factory.prototype = {
Java: function (content) {
//......
},
JavaScript: function (content) {
//......
},
UI: function (content) {
//......
}
}
//模拟数据
var data = [
{
type:'JavaScript',
content:'JavaScript哪家强'
},
{
type:'Java',
content:'Java哪家强'
},
{
type:'UI',
content:'UI哪家强'
}
];
//格式友好,快速完成需求
for (var i = 0; i++; i < 2) {
Factory(s[i].type, s[i].content);
}
对于创建多类对象,简单工厂就不太适合了。工厂方法模式我们可以轻松创建多个类的实例,我们不必关心创建该对象的具体类,只要调用工厂模式即可。
如果其他人不小心错误的调用工厂格式,这样就有可能通过工厂方法执行中的this对象为全局对象添加变量,并且得不到期望的实例对象,所以安全的工厂模式可以给我们吃一个定心丸。
摘自:《JavaScript设计模式》 张容铭著