0

我读到的关于服务/工厂/供应商的最清楚的例子之一是它们对应于:一辆汽车,一个为您提供汽车的工厂(例如红色汽车,蓝色汽车),以及一个输出汽车的可配置工厂(例如高质量汽车,劣质汽车)

令我困惑的部分是“一切都是单例”的解释。在上面的例子中,我假设“服务”是一个返回自身的单例,工厂和提供者是返回对象的单例(每个都是唯一的)。也就是说,如果一个控制器有一辆蓝色汽车,另一个是红色汽车,它们将是两辆独立的汽车。

我认为尽管混乱来自工厂以两种不同的方式编写。在一种方式中,您返回一个对象。这使得它在功能上等同于“服务”。另一方面,您返回一个可实例化对象的函数,以便使用该工厂的任何东西都可以获得新的单独实例。

这个对吗?在编写工厂的两种方法中,哪一种是反模式?

4

2 回答 2

1

从我专门为回答这个问题而写的博客中:

所以就在这里。我将总结一下,然后用一些例子跟进:

  • 当您想要传递构造函数时使用服务。该函数将使用“new”运算符调用并存储结果。
  • 当您想从函数返回对象时使用工厂(即工厂模式)。将调用该函数并存储结果。
  • 如果您希望能够在对象可用之前为其提供模块范围的配置,请使用提供程序。

为什么有多种方式?主要是因为一些基于 JavaScript 的系统(如 TypeScript 和 CoffeeScript)生成的代码规定了一种方法而不是另一种方法,所以它的存在是为了灵活性。

要查看带有示例的完整帖子:http: //cshaperimage.jeremylikness.com/2014/01/understanding-providers-services-and.html

于 2014-03-19T19:50:24.860 回答
0

我所看到的与工厂的关系相当于 Javascript 中的显示模块设计模式。

模块设计模式——Singelton:

var x = (function() {
    var y = 1,

    zMethod = function() {
       return y + y;
    }

    return {
       y: y,
       z: zMethod 
    }

}());

角工厂:

angular.module('app', [])
    .factory('x', function() {
        var y = 1,
        zMethod = function() { return y + y; }

        return {
            y: y,
            z: zMethod
        }
    });

有助于澄清幕后发生的事情......但这只是三个部分之一!

于 2014-03-19T18:09:53.897 回答