Angular comes with different types of services. Each one with its own use cases.
All of these services are singletons. You probably want to use Factory all the time.
Provider
- is the parent of all other services (except 
constant) - can be configured using `app.config(function(Provider) { ...})
 - a little complex
 
Factory
- simpler than Provider, but without configuration
 - definition: `app.factory('name', someFunction)
 - 
someFunctionis called when thenameservice is instantiated and should return an object 
Service
- just like Factory, but:
 - instead of a funciton, it receives a Javascript class / a constructor function as argument
 - simplest service type, but also least flexible
 
Value
- just stores a single value
 - use it like `app.value('name', 'value')
 
Constant
- just like value, but:
 - can be injected everywhere
 - is not constant Oo, but may be changed
 
Decorating services
- useful for extending 3rd-party services
 - 
$delegateis the service instance
^ 
app.config(function($provide) {
  $provide.decorator('serviceToBeDecorated', function($delegate) {
    // modify $delegate by adding functions etc.
    return $delegate;
  });
});
More differences
|          | Factory | Service | Value | Constant | Provider |
| can have dependencies | yes |	yes | no | no | yes |
| uses type friendly injection | no | yes | yes* | yes* | no |
| object available in config phase | no | no | no | yes | yes** |
| can create functions |	yes | yes | yes | yes | yes |
| can create primitives | yes | no | yes | yes | yes |
(taken from Angular Guide Show archive.org snapshot . Go there for further explanation.)
Posted by Henning Koch to makandra dev (2013-09-16 09:40)