其他分享
首页 > 其他分享> > JS设计模式-工厂模式

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("自行车店不生产自行车")
}

标签:function,name,JS,bicycleShop,工厂,自行车,new,createBicycle,设计模式
来源: https://www.cnblogs.com/qianduanxiaozhi1/p/15861124.html