or you pass the "singleton" object all along the collaboration chain because one class at the end needs it. Worse, all your collaboration classes will depend on the "singleton" even without using it.
I'm not sure that is true. e.g is class A collaborates with classes B and C and class C uses a single instance of class D.
If C is passed an instance of D via A. Classes A & C are clearly depenedent on A.
If C accesses D via a global access point such as a singleton. Class C is clearly dependent on D and A is clearly dependent on C. Therefore A is also dependent on D.
The difference is that by passing the instance along the collaborators the dependency is explicit instead of implicit. In general I think this is preferable.