JS开发之Factory(工厂)模式解析,Factory模式时另一种创建型模式,涉及创建对象的概念。其分类不同于其他模式的地方在于它不显式地要求使用一个构造函数。而Factory可以提供一个通用的接口来创建对象,我们可以指定我们所希望创建的工厂对象的类型。
模式图:
如果对象创建过程相对比较复杂,这种方法特别有用,例如,如果它强烈依赖于动态因素或应用程序配置的话。
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> //先定义几种车 构造函数 工厂方法 function Car(options) { this.doors = options.doors || 4; this.state = options.state || "brand"; this.color = options.color || "silver"; } function Truck(options) { this.state = options.state || "used"; this.wheelSize = options.wheelSize || "large"; this.color = options.color || "blue"; } //再定义生产车辆的工厂 function VehicleFactory() {} //定义该工厂生产的默认汽车类型 VehicleFactory.prototype.vehicleClass = Car; //Car是函数 //定义生产汽车的具体过程 VehicleFactory.prototype.createVehicle = function(options) { if(options.vehicleType === "car"){ this.vehicleClass = Car; }else{ this.vehicleClass = Truck; } return new this.vehicleClass(options); }; //建造工厂并命名 var carFactory = new VehicleFactory(); //开始生产汽车 var car = carFactory.createVehicle({ vehicleType: "car", color: "yellow", doors: 6 }); //验证车是否是这个Car类型的车 console.log(car instanceof Car); //验验车,看看货 console.log(car); //再生产另一部车 var movingTruck = carFactory.createVehicle({ vehicleType: "truck", state: "like new", color: "red", wheelSize: "small" }); //验证车是否是Track类型的车 console.log(movingTruck instanceof Truck); //验验车,看看货 console.log(movingTruck); //----------------------------------------------- //定义第二个工厂 是上面那个工厂的子工厂 function TruckFactory() {} TruckFactory.prototype = new VehicleFactory(); TruckFactory.prototype.vehicleClass = Truck; //创建工厂 var TruckFactory = new TruckFactory(); //生产卡车 var myBigTruck = TruckFactory.createVehicle({ state: "omg..so bad.", color: "pink", wheelSize: "so big" }); //验验车 console.log(myBigTruck instanceof Truck); //看看货 console.log(myBigTruck); </script> </body> </html>