JavaScript设计模式样例六 —— 抽象工厂模式

30 阅读1分钟

抽象工厂模式(Abstract Factory Pattern)

定义:抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。或者说,是其他工厂的工厂。
目的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
场景:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
class User {
    constructor (type) {
        if (new.target === User) {
            throw new Error('抽象类不能实例化!')
        }
        this.type = type
    }
}

class UserOfWechat extends User {
    constructor (name) {
        super('wechat')
        this.name = name
        this.viewPage = ['首页', '通讯录', '发现页']
    }
}

class UserOfQQ extends User {
    constructor (name) {
        super('qq')
        this.name = name
        this.viewPage = ['首页', '通讯录', '发现页']
    }
}

function getUser (type) {
    switch (type) {
        case 'wechat':
            return UserOfWechat
            break
        case 'qq':
            return UserOfQQ
            break
        default:
            throw new Error('参数错误')
            break
    }
}

let WechatUserClass = getUser('wechat')
let QQUserClass = getUser('qq')

let wechatUser = new WechatUserClass('卡卡罗特')
let qqUser = new QQUserClass('贝吉塔')

Github地址:github.com/skillnull/D…