工厂模式 详解
来源:互联网 发布:editplus怎么用java 编辑:程序博客网 时间:2024/05/21 08:14
定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类;
创建类模式
角色
- 抽象工厂角色(AbstractFactory):模式的核心,提供具体工厂角色必须实现的接口或者必须继承的父类;
- 具体工厂角色(ConcreteFactory):含有和具体业务逻辑有关的代码,由应用程序调用以创建对应的具体产品的对象;
- 抽象产品角色(AbstractProduct): 负责具体产品角色的定义的接口或抽象类;
- 具体产品角色(ConcreteProduct): 被具体工厂角色创建的对象;
从网上找到的例图
适用场景
- 当一个类不知道它所创建的对象的类的时候;
- 当一个类希望由它的子类来指定它所创建的对象的时候;
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部话的时候;
例子
实现代码
/** * Created by George on 16/7/3. *///汽车function Car(options) { this.doors = options.doors || 4; this.state = options.state || "new"; this.color = options.color || "white";}//卡车类function Truck(options) { this.state = options.state || "used"; this.wheelSize = options.wheelSize || "large"; this.color = options.color || "blue";}// 工厂function VehicleFactory() {}// 定义该工厂factory的原型和试用工具,默认是carVehicleFactory.prototype.vehicleClass = 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,});console.log(car instanceof Car);console.log(car);//创建生成卡车的工厂实例var movingTruck = carFactory.createVehicle({ vehicleType : "truck", state : "new", color : "red", wheelSize : "small",});console.log(car instanceof Truck);console.log(movingTruck);/////////////////////////////将VehicleFactory归入子类来创建一个构建Truck的工厂类function TruckFactory() {}TruckFactory.prototype = new VehicleFactory();// 定义该工厂factory的原型和试用工具,默认是carTruckFactory.prototype.vehicleClass = Truck;var truckFactory = new TruckFactory();var bigTruck = truckFactory.createVehicle({ state : "bad", color : "black", wheelSize : "big",});console.log(bigTruck instanceof Truck);console.log(bigTruck);
实现结果:
优缺点
- 可以使代码结构清晰,有效地封装变化,降低耦合度。通过工厂模式,将产品的实例化封装起来,使得调用者根本无须关心产品的实例化过程,只需依赖工厂就可以得到自己想要的产品;
- 对调用者屏蔽具体的产品类,只关心产品的接口;
- 扩展性高,如果想要增加一个产品,只要扩展一个工厂类就可以;
注意的是
1. 每次增加一个产品的时候,都要增加一个具体类和对象实现工厂,使得系统中类的个数成倍的增加,在一定程度上增加了系统的复杂度,同时也增加系统具体类的依赖;
0 0
- 各种工厂模式详解
- JAVA工厂模式详解
- 各种工厂模式详解
- java 工厂模式详解
- 工厂模式详解
- 工厂模式IDAL详解
- php工厂模式详解
- 简单工厂模式详解
- 工厂方法模式详解
- java 工厂模式 详解
- 工厂方法模式详解
- 工厂模式详解
- java工厂模式详解
- 工厂模式 详解
- 工厂设计模式详解
- 抽象工厂模式详解
- java工厂模式详解
- 详解工厂模式
- 安卓学习笔记(三)Button与 ImageButton
- 1985年程序员是如何写代码的
- php 递归删除目录
- "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char
- 合伙创业股权分配之实战模拟:分配股权都有哪些考量因素?
- 工厂模式 详解
- iOS-使用CFStringTransform将汉字转换为拼音
- JavaScript Date(日期)对象
- iOS-FMDB
- CNN for NLP
- go语言实现斐波数列
- 全球最杰出的14位程序员
- 浅谈C++类(6)--复制构造函数
- Git:暂存区(git diff)