什么是⼯⼚模式?
什么是⼯⼚模式?
⼯⼚模式是⼀种⽤来创建对象的设计模式。我们不暴露对象创建的逻辑,⽽是将逻辑封装在⼀个函数内,那么这个函数可以成为⼯⼚。 ⼯⼚模式根据抽象程度的不同可以分为:1.简单⼯⼚ 2.⼯⼚⽅法 3.抽象⼯⼚
简单⼯⼚:
let factory = function (role) {
function superman() {
this.name ='超级管理员',
}
function commonMan() {
this.name = '普通游客',
}
switch(role) {
函数prototypecase 'superman':
return new superman();
break;
case 'man':
return new commonMan();
break;
default:
throw new Error('参数错误')
}
}
let superman = factory('superman');
let man = factory('man');
在上述代码中,factory就是⼀个简单的⼯⼚,该⼯⼚中有⼆个构造函数分别对应不同的权限。我们只需要传递相应的参数就可以获取⼀个实例对象了。⼯⼚内部的构造函数有相似的地⽅,还可以进⼀步优化。
let factory = function (role) {
function User(obj) {
this.name = obj.name;
}
switch(role) {
case 'superman':
return new User({ name: '平台⽤户', role: ['主页', '登录页'] })
break;
case 'man':
return new User({ name: '游客', role: ['登录页']})
break;
default:
throw new Error('参数错误')
}
}
let superman = factory('superman');
let man = factory('man');
简单⼯⼚的优点: 你只需要传递⼀个合法的参数,就可以获取到你想要的对象,⽽⽆需知道创建的具体的细节。但是在函数内包含了所有对象的构造函数和判断逻辑的代码, 每次如果需要添加⼀个对象,那么我们需要新增⼀个构造函数,当我们需要维护的对象不是上⾯这2个,⽽是20个或者更多,那么这个函数将会成为超级函数,使得我们难以维护。所以简单⼯⼚模式只适⽤于在创建时对象数量少,以及逻辑简单的情况。
2.⼯⼚⽅法:
⼯⼚⽅法模式本意是将实际创造的对象推迟到⼦类中,这样核⼼类就变成了抽象类。但是在js中很难像那些传统⾯向对象语⾔那样去实现抽象类,所以在js中我们只需要参考他的思想即可。
我们可以把⼯⼚函数看成是⼀个⼯⼚类。在简单模式我们,我们添加⼀个新的对象需要修改⼆处地⽅,在加⼊⼯⼚⽅法模式以后,我们只需要修改⼀处即可。⼯⼚⽅法的⼯⼚类,他只做实例化这⼀件事情。我们只需要修改他的原型类即可。我们采⽤安全模式创建⼯⼚对象。
let factory = function (role) {
if(this instanceof factory) {
var s = new this[role]();
return s;
} else {
return new factory(role);
}
}
factory.prototype = {
admin: function() {
this.name = '平台⽤户';
},
common: function() {
this.name = '游客';
},
test: function() {
this.name = '测试';
}
let admin = new factory('admin');
let common = new factory('common'); let test = new factory('test');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论