AngularJS: Cuándo usar el servicio en lugar de la fábrica

Por favor ten paciencia conmigo aquí. Sé que hay otras respuestas como:AngularJS: Servicio vs proveedor vs fábrica

Sin embargo, todavía no puedo entender cuándo usarías el servicio sobre la fábrica.

Por lo que puedo decir, la fábrica se usa comúnmente para crear funciones "comunes" que pueden ser llamadas por varios Controladores:Creación de funciones de controlador comunes

Los documentos angulares parecen preferir la fábrica al servicio. Incluso se refieren al "servicio" cuando usan la fábrica, lo que es aún más confuso.http://docs.angularjs.org/guide/dev_guide.services.creating_services

Entonces, ¿cuándo uno usaría el servicio?

¿Hay algo que solo es posible o mucho más fácil hacer con el servicio?

¿Hay algo diferente que pasa detrás de las escenas? ¿Diferencias de rendimiento / memoria?

Aquí hay un ejemplo. Aparte del método de declaración, parecen idénticos y no puedo entender por qué haría uno frente al otro.http://jsfiddle.net/uEpkE/

Actualizar: De la respuesta de Thomas, parece implicar que el servicio es para una lógica más simple y una lógica más compleja con métodos privados, así que actualicé el siguiente código de violín y parece que ambos son capaces de admitir funciones 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()
    ];
}

Respuestas a la pregunta(8)

Su respuesta a la pregunta