首页 > Web开发 > 详细

JS工厂模式

时间:2019-03-09 21:13:12      阅读:213      评论:0      收藏:0      [点我收藏+]

什么是工厂模式?

工厂模式是一种用来创建对象的设计模式。我们不暴露对象创建的逻辑,而是将逻辑封装在一个函数内,那么这个函数可以成为工厂。工厂模式根据抽象程度的不同可以分为:1.简单工厂 2.工厂方法 3.抽象工厂

 

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个或者更多,那么这个函数将会成为超级函数,使得我们难以维护。所以简单工厂模式只适用于在创建时对象数量少,以及逻辑简单的情况。

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 = ‘平台用户‘;
        this.role = [‘登录页‘, ‘主页‘]

    },
    common: function() {
        this.name = ‘游客‘;
        this.role = [‘登录页‘]
    },
    test: function() {
        this.name = ‘测试‘;
        this.role =  [‘登录页‘, ‘主页‘, ‘测试页‘];
        this.test = ‘我还有一个测试属性哦‘
    }
}

let admin = new factory(‘admin‘);
let common = new factory(‘common‘);
let test = new factory(‘test‘);

在上述代码中要是忘记加new了, 那么我们就获取不到admin,common等对象了,使用安全模式可以很好的解决这个问题。

JS工厂模式

原文:https://www.cnblogs.com/xiaogua/p/10502892.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!