我读到的关于服务/工厂/供应商的最清楚的例子之一是它们对应于:汽车,为您提供汽车的工厂(例如红色汽车,蓝色汽车)以及可输出汽车的可配置工厂(例如高品质的汽车,低质量的汽车)
令我困惑的部分是"一切都是单身"说明。从上面的例子我假设一个"服务"是一个单身人士返回自己,工厂和提供者是返回对象的单身人士(每个人都是独一无二的)。也就是说,如果一个控制器有一辆蓝色轿车,另一个是红色轿车,那么它们将是两辆独立的汽车。
我认为虽然混淆来自工厂以两种不同的方式编写。在某种程度上,您返回一个对象。这使它在功能上等同于"服务"。在另一种方式中,您返回一个可实例化对象的函数,以便使用此工厂的任何东西都可以获得新的单独实例。
这是对的吗?在写工厂的两种方法中,其中任何一种都是反模式的吗?
答案 0 :(得分:1)
我专门写的一篇博客回答了这个问题:
所以在这里。我将总结然后跟进一些例子:
为什么有多种方式?主要是因为像TypeScript和CoffeeScript这样的一些系统会生成代码,这些代码决定了一种方法而不是另一种方法,所以它具有灵活性。
要查看包含示例的完整帖子:http://csharperimage.jeremylikness.com/2014/01/understanding-providers-services-and.html
答案 1 :(得分:0)
我所看到的关系是工厂相当于Javascript中的揭示模块设计模式。
模块设计模式 - Singelton:
var x = (function() {
var y = 1,
zMethod = function() {
return y + y;
}
return {
y: y,
z: zMethod
}
}());
Angular Factory:
angular.module('app', [])
.factory('x', function() {
var y = 1,
zMethod = function() { return y + y; }
return {
y: y,
z: zMethod
}
});
帮助澄清幕后发生的事情......但这只是三个部分之一!