🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 1.简单工厂: ~~~ let factory = function (role) { function superman() { this.name ='超级管理员', this.role = ['修改密码', '发布消息', '查看主页'] } function commonMan() { this.name = '普通游客', this.role = ['查看主页'] } switch(role) { case '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; this.role = obj.role; } 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个或者更多,那么这个函数将会成为超级函数,使得我们难以维护。所以简单工厂模式只适用于在创建时对象数量少,以及逻辑简单的情况。