抽象工厂模式

// 抽象工厂方法
var Book = function(subType, superType) {
    if (typeof Book[supeType] === 'function' ) {
        function F() {};
        F.prototype = new Book[subType]();
        subType.constructor = subType;
        subType.prototype = new F();
    }  else {
        throw new Error('未创建该抽象类');
    }
}

// 读库抽象类
Book.Duku = function() {
    this.type = 'duku';
};
Book.Duku.prototype = {
    getPrice : function() {
        return new Error('抽象方法不能调用');
    },
    getName : function() {
        return new Error('抽象方法不能调用');
    }
};

// 计算机图书抽象类
Book.Computer = function() {
    this.type = 'computer';
}
Book.Computer.prototype = {
    getPrice : function() {
        return new Error('抽象方法不能调用');
    },
    getName : function() {
        return new Error('抽象方法不能调用');
    }
};

// 历史书抽象类
Book.History = function() {
    this.type = 'history';
}
Book.History.prototype = function() {
    getPrice : function() {
        return new Error('抽象方法不能调用');
    },
    getName : function() {
        return new Error('抽象方法不能调用');
    }
}

// 读库子类
var DK = function(price, name) {
    this.price = price;
    this.name = name;
}

// 抽象工厂实现对Duku抽象类的继承
Book(DK, 'Duku');
DK.prototype.getPrice = function() {
    return this.price;
}
DK.prototype.getName = function() {
    return this.name;
}
......

// 单例测试
var duku1501 = new DK(30.00, duku1501);
console.log(duku1501.getPrice());  // 30.00
console.log(duku1501.getName());  // duku1501

你可能感兴趣的:(抽象工厂模式)