Por favor, tenha paciência comigo aqui. Sei que existem outras respostas, como: AngularJS: Service vs provider vs factory
No entanto, ainda não consigo descobrir quando você usaria o serviço na fábrica.
Pelo que sei, a fábrica é comumente usada para criar funções "comuns" que podem ser chamadas por vários controladores: Criando funções comuns do controlador
Os documentos angulares parecem preferir a fábrica ao invés do serviço. Eles até se referem ao "serviço" quando usam a fábrica, o que é ainda mais confuso! http://docs.angularjs.org/guide/dev_guide.services.creating_services
Então, quando alguém usaria o serviço?
Existe algo que só é possível ou muito mais fácil com o serviço?
Existe algo diferente que se passa nos bastidores? Diferenças de desempenho / memória?
Aqui está um exemplo. Além do método de declaração, eles parecem idênticos e não consigo entender por que eu faria um contra o outro. http://jsfiddle.net/uEpkE/
Atualização: Com a resposta de Thomas, parece implicar que o serviço é mais simples e a fábrica é mais complexa com métodos privados. Por isso, atualizei o código do violino abaixo e parece que ambos são capazes de suportar funções privadas?
myApp.factory('fooFactory', function() {
var fooVar;
var addHi = function(foo){ fooVar = 'Hi '+foo; }
return {
setFoobar: function(foo){
addHi(foo);
},
getFoobar:function(){
return fooVar;
}
};
});
myApp.service('fooService', function() {
var fooVar;
var addHi = function(foo){ fooVar = 'Hi '+foo;}
this.setFoobar = function(foo){
addHi(foo);
}
this.getFoobar = function(){
return fooVar;
}
});
function MyCtrl($scope, fooService, fooFactory) {
fooFactory.setFoobar("fooFactory");
fooService.setFoobar("fooService");
//foobars = "Hi fooFactory, Hi fooService"
$scope.foobars = [
fooFactory.getFoobar(),
fooService.getFoobar()
];
}