定义

定义一个用于创造对象的接口,让子类决定实例化具体的哪一个类。将一个类的实例化延迟到其子类。

动机

子类重新定义父类的构造实例的方法。

Simple Factory

适用情形:如果有太多的类,那么我们只提供一个。

  1. function PopFactory(name) {
  2. switch (name) {
  3. case 'login':
  4. return new LoginPop();
  5. case 'signup':
  6. return new SignUpPop();
  7. }
  8. }
  9. function createPop(name, str) {
  10. let o = {};
  11. o.content = str;
  12. o.show = () => {
  13. };
  14. switch (name) {
  15. case 'login':
  16. // modifier
  17. case 'signup':
  18. // modifier
  19. }
  20. return o;
  21. }

Standard Factory

  • 提供一个通用接口来创建类似的对象,例如一个 UI 工厂方法来创建对应类型的 UI 组件。
  • 适用情形
    • 当一个类不知道它所需要创建对象的类的时候。
    • 当一个类希望由它的子类来决定盖创建什么对象的时候。
    • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类代理者是这一信息局部化的时候。

实现

  1. 子类实现父类的定义的工厂方法。
  2. 参数化工厂方法。
  1. var peopleFactory = function(type, name) {
  2. function People(name) {
  3. this.name = name;
  4. }
  5. var fn = People.prototype;
  6. fn.method1 = function() {};
  7. fn.method2 = function() {};
  8. switch (type) {
  9. case 'black':
  10. fn.method3 = function() {};
  11. break;
  12. case 'white':
  13. fn.method4 = function() {};
  14. break;
  15. }
  16. return new People(name);
  17. }
  1. abstract class App {
  2. createDocument(content: string): Document;
  3. }
  4. abstract class Document {}
  5. class IOSDocument extends Document {}
  6. class IOSApp extends App {
  7. createDocument(content) {
  8. return new IOSDocument(content);
  9. }
  10. }

效果:

  • 为子类提供 hooks。
  • 连接平行层次。