AngularJs: чем отличается provider, factory и service

Для начала абстрагируемся вообще от AngularJs и задач возложеных на 3 его метода provider, factory и service.

Попробуем представить, что у нас просто есть метод provider:

var provider = function(name, provider_) { [some code] }

и он как-то работает, как? – нас пока не интересует. Теперь посмотрим на код для метода factory:

function factory(name, factoryFn) { return provider(name, { $get: factoryFn }); }

из которго видно, что это просто обертка для provider.

Идем дальше: что же представляет собой service:

function service(name, constructor) {
    return factory(name, ['$injector', function($injector) {
      return $injector.instantiate(constructor);
    }]);
  }

– тоже обертка, только для factory.

Вот пример кода одной задачи реализованной 3мя способами.