定义
定义一个用于创造对象的接口,让子类决定实例化具体的哪一个类。将一个类的实例化延迟到其子类。
动机
子类重新定义父类的构造实例的方法。
Simple Factory
适用情形:如果有太多的类,那么我们只提供一个。
function PopFactory(name) {switch (name) {case 'login':return new LoginPop();case 'signup':return new SignUpPop();}}function createPop(name, str) {let o = {};o.content = str;o.show = () => {};switch (name) {case 'login':// modifiercase 'signup':// modifier}return o;}
Standard Factory
- 提供一个通用接口来创建类似的对象,例如一个 UI 工厂方法来创建对应类型的 UI 组件。
- 适用情形
- 当一个类不知道它所需要创建对象的类的时候。
- 当一个类希望由它的子类来决定盖创建什么对象的时候。
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类代理者是这一信息局部化的时候。
实现
- 子类实现父类的定义的工厂方法。
- 参数化工厂方法。
var peopleFactory = function(type, name) {function People(name) {this.name = name;}var fn = People.prototype;fn.method1 = function() {};fn.method2 = function() {};switch (type) {case 'black':fn.method3 = function() {};break;case 'white':fn.method4 = function() {};break;}return new People(name);}
abstract class App {createDocument(content: string): Document;}abstract class Document {}class IOSDocument extends Document {}class IOSApp extends App {createDocument(content) {return new IOSDocument(content);}}
效果:
- 为子类提供 hooks。
- 连接平行层次。
