简单工厂模式是由一个工厂对象决定创建某一种产品对象的实例。主要用来创建同一类对象。如下:
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 或留言,本人会在第一时间与您联系,谢谢!!
长按二维码关注我们,了解最新前端资讯