Javascript:什么是工厂?

时间:2016-03-21 04:33:20

标签: javascript

我正在和我的一位朋友交谈,他有大约9年的JS经验。他帮我解决了代码问题,并谈到了闭包和javascript工厂。我之前从未听过这个词,并且想知道是否"工厂"是javascript社区/语言中的东西?如果是这样,有人可以向我解释一下吗?

我知道什么是封口,但据他说,"工厂"是学习语言的下一级课程。

1 个答案:

答案 0 :(得分:2)

来自Wikipedia

  

在基于类的编程中,工厂方法模式是创造性的   使用工厂方法来处理创建问题的模式   对象,而不必指定对象的确切类   将被创建。这是通过调用工厂创建对象来完成的   方法 - 在接口中指定并由child实现   类,或在基类中实现并可选择地重写   派生类 - 而不是通过调用构造函数。

来自Learning JavaScript Design Patterns

  

工厂模式是另一个关注的模式   创建对象的概念。它与其他模式不同的地方   在它的类别中,它没有明确要求我们使用a   构造函数。相反,Factory可以为其提供通用接口   创建对象,我们可以在其中指定工厂对象的类型   希望被创造。

     

想象一下,我们有一个UI工厂,我们被要求创建一个类型   UI组件。而不是直接使用创建此组件   新操作员或通过另一个创建构造函数,我们问一个   而是替换新组件的工厂对象。我们告诉工厂什么   对象的类型是必需的(例如“按钮”,“面板”)并且它是实例化的   这个,返回给我们使用。

     

如果对象创建过程是特别有用的话   相对复杂,例如如果它强烈依赖于动态因素或   应用程序配置。

     

此模式的示例可以在诸如ExtJS的UI库中找到   其中可以进一步创建对象或组件的方法   子类。

示例:

var Brand = {
    Daihatsu : function(type) {
        this.type = type;
    },
    Honda : function(type) {
        this.type = type;
    },
    Toyota : function(type) {
        this.type = type;
    }
};

var Car = {
    factory : function(brand, type) {
        return new Brand[brand](type);
    }
};

var cars = [
    Car.factory('Honda', 'Civic'),
    Car.factory('Toyota', 'AYGO'),
    Car.factory('Daihatsu', 'Consorte'),
    Car.factory('Toyota', 'Carina')
];