适用场景:
- 对象的构建比较复杂;
- 根据不同的条件创建不同的对象(隐藏创建过程、暴露共同接口);
实际应用场景:根据不同的节点类型创建不同的DOM节点。
下面用代码实现一个最简单的工厂模式
- ES5实现方式
var PhoneShop = function() {};
PhoneShop.prototype = {
sellPhone: function(name) {
var phone = phoneFactory.createPhone(name);
console.log(`你卖了一台${name}手机!`)
return phone;
},
}
var PingGuo = function() {
console.log(`你生产了一台pingguo手机!`)
}
var XiaoMi = function() {}
var phoneFactory = {
createPhone: function(name) {
var phone;
switch(name) {
case 'pingguo':
phone = new PingGuo();
break;
case 'xiaomi':
phone = new XiaoMi();
break;
}
return phone;
}
}
var phone = new PhoneShop().sellPhone('pingguo')
console.log('phone', phone)
- ES6实现方式
class phoneShop {
constructor() {
}
static sellPhone(name) {
let phone = phoneFactory.createPhone(name);
console.log(`你卖了一台${name}手机!`)
return phone;
}
}
class phoneFactory {
constructor() {
}
static createPhone(name) {
let phone;
const types = {
pingguo: function() {
console.log(`你生产了一台pingguo手机!`)
},
xiaomi: function() {
console.log(`你生产了一台xiaomi手机!`)
}
}
phone = new types[name]();
return phone;
}
}
let phone = phoneShop.sellPhone('pingguo')
console.log('phone',phone)