JS设计模式-工厂模式
JS设计模式-工厂模式
概述:一个模具生产多个产品
1.简单工厂模式
function person(name,age,gender){
this.name = name
this.age = age
this.gender = gender
}
var p1 = new person('zhangsan',1,'male')
var p2 = new person('lisi',2,'female')
......(无数个person)
如上,一个简单的构造函数person可以产出各异的人
2.复杂版工厂模式
抽象共有方法到父类,在子类编写特有的方法
概述(举个例子):零售店(子)售卖工厂(父)产出的产品,每个产品都有相同的方法以及自己特殊的方法
直接上代码
//父类
function bicycleShop(name){
this.name = name
}
//子类
function bicycleFactory(name){
this.name = name
bicycleShop.call(this,name)
}
//继承方法
function extend(sub,sup){
function F(){}
F.prototype = sup.prototype
sub.prototype = new F()
sub.prototype.constructor = sub
}
//父类通用方法(抽象类)
bicycleShop.prototype = {
constructor:bicycleShop,
sellBicycle:function(){
var bicycle = this.createBicycle()
bicycle.a() //执行a任务
bicycle.b() //执行B任务
return bicycle
},
createBicycle:function(){
throw new Error("自行车店不生产自行车")
}
}
//继承
extend(bicycleFactory,bicycleShop)
bicycleFactory.prototype.createBicycle = function(){
function a(){
console.log('执行a任务');
}
function b(){
console.log('执行B任务');
}
return {
a,
b
}
}
var oneBicycle = new bicycleFactory('laladui')
console.log(oneBicycle);
// bicycleFactory {name: 'laladui'}
// name: "laladui"
// [[Prototype]]: bicycleShop
// constructor: ? bicycleFactory(name)
// createBicycle: ? ()
// [[Prototype]]: Object
// constructor: ? bicycleShop(name)
// createBicycle: ? ()
// sellBicycle: ? ()
// [[Prototype]]: Object
console.log(oneBicycle.sellBicycle()); //{a: ?, b: ?}
var badBicycle = new bicycleShop('haha')
console.log(badBicycle.sellBicycle()); //Uncaught Error: 自行车店不生产自行车
文字描述:每辆自行车都有共同的createBicycle和sellBicycle方法,以及各自特定的a,b方法
var oneBicycle = new bicycleFactory('laladui')
oneBicycle.sellBicycle()
? 售卖一辆自行车
var bicycle = this.createBicycle()
? 在sellBicycle拿到这辆自行车
bicycle.a() //执行a任务
bicycle.b() //执行B任务
? 售卖时执行这辆自行车独有的方法a和b
需要注意的是自行车售卖点并不能生产自行车,因此在编写子类时需要对下方的方法进行重构并赋予特性
createBicycle:function(){
throw new Error("自行车店不生产自行车")
}