JavaScript 设计模式之简单工厂模式

461 阅读1分钟

简单工厂模式

简单工厂模式可以理解为:现有一个生产 东东工厂。这里的“东东”就是一个实体类,这里的“工厂”就是我们外抛的一个接口。从“消费者(想要得到一个‘东东’的人)”的角度来看,我不需要知道你这个“工厂”是怎么生产“东东”的,或者说“工厂”生产什么“东东”是由“消费者”决定的。

下面是简单工厂模式的一个简单运用:

function Person(options) { // 东东
    this.name = options.name;
    this.permission = options.permission;
}

function PersonFactory(role) { // 工厂
    switch (role) {
        case 'admin':
            return new Person({ name: 'Admin', permission: ['/index', '/edit', '/admin'] });
        case 'editor':
            return new Person({ name: 'Editor', permission: ['/index', '/editor'] });
        case 'visitor':
            return new Person({ name: 'Visitor', permission: ['/index'] });
        default:
            throw new Error('参数错误,可选:admin | editor | visitor');
    }
}

let admin = PersonFactory('admin'); // 消费
let editor = PersonFactory('editor');
let visitor = PersonFactory('visitor');

// let user = PersonFactory('user'); // Error: 参数错误,可选:admin | editor | visitor

console.log(admin);
console.log(editor);
console.log(visitor);
// console.log(user);

如果不用简单工厂模式你可能会写出这样的代码:

// 你需要为每一个实体创建一个实体类

let admin = new Admin();
let editor = new Editor();
let visitor = new Visitor();

笔者也是刚学设计模式,可能是由于我平时写代码的时候就是这种(简单设计模式)写法,导致我至今不知道简单工厂模式是什么东西?前面是笔者通过学习后的简单理解,不知对错与否,愿不吝赐教!