定义
定义一个用于创造对象的接口,让子类决定实例化具体的哪一个类。将一个类的实例化延迟到其子类。
动机
子类重新定义父类的构造实例的方法。
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':
// modifier
case '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。
- 连接平行层次。