简单工厂模式是由一个工厂对象决定创建某一种产品对象的实例。主要用来创建同一类对象。如下:
function createPersion(name, age, job) {
var persion = new Object();
persion.name = name;
persion.age = age;
persion.job = job;
persion.sayName = function() {
alert(this.name)
}
return persion;
}
var persion1 = createPersion('bill', '27', '研发');
console.log(persion1); // {name: "bill", age: "27", job: "研发", sayName: ƒ}
var persion2 = createPersion('bill2', 30, 'seo');
console.log(persion2); // {name: "bill2", age: 30, job: "seo", sayName: ƒ}
复制代码
我们还可以指定我们希望创建的工厂的类型。如:
// 定义一个 white(白酒) 构造函数
function White(options) {
this.brand = options.brand || '茅台', // 品牌
this.proof = options.proof || '45' // proof 酒精度
}
// 定义一个 red(红酒) 构造函数
function Red(options) {
this.brand = options.brand || '拉菲', // 品牌
this.proof = options.proof || '12' // proof 酒精度
}
// 定义一个wine 工厂的大体代码
function Wine() {}
// 定义该工厂的默认类型 为 白酒
Wine.prototype.wineClass = White;
// 创建酒的实例的工厂方法
Wine.prototype.createWine = function(options) {
if (options.type === 'white' ) {
this.wineClass = White;
} else {
this.wineClass = Red;
}
return new this.wineClass(options);
}
// 创建生成白酒的工厂实例
var whiteWine = new Wine();
var white = whiteWine.createWine({
type: 'white',
brand: '五粮液',
proof: '53'
})
console.log(white) // White {brand: "五粮液", proof: "53"}
// 创建生成红酒的工厂实例
var red = whiteWine.createWine({
type: 'red',
brand: '白兰地',
proof: '22'
})
console.log(red) // Red {brand: "白兰地", proof: "22"}
复制代码
工厂模式的应用场景
- 当对象或组件涉及高复杂性时
- 当需要根据所在的不同环境生成对象的不同实例时
- 当处理很多共享相同属性的对象或组件时
- 当编写只需要满足一个api契约的其他对象的实例对象时。对于解耦很有用
如有侵权,请发邮箱至wk_daxiangmubu@163.com 或留言,本人会在第一时间与您联系,谢谢!!