These are the actually Dependency injection techniques in angularjs. The link below explains in detail the difference between them and why these should be used.
https://github.com/angular/angular.js/wiki/Understanding-Dependency-Injection
While Provideris more complex than factory than is from service, u will see that Provider provides a lot of configurations. By the way i think the link above is the best document i found when i was trying mess up my head around these craps.