As ever for this sort of subject, there is no answer that applies to every problems. Some said that singleton should be avoided when they are used as an access to a service. It is a use that is akin to the use of global variables. This way you mask the fact that you use service X in your implementation :
// in header
class MyUsefulClass
{
public:
void doSomethingUseful();
};
// in .cpp
MyUsefulClass::doSomethingUseful()
{
// ...
MyWonderfulService::instance().doService1();
// ...
MyWonderfulService::instance().doService2();
}
You create a coupling with MyWonderfulService that the users of your class can not guess.
Moreover, You can not easily test your useful class with a mock service ...
That's why I usually prefer dependancy inversion :
// in header
class MyUsefulClass
{
public:
void setServiceToUse(MyService&);
void doSomethingUseful();
// [...]
};
// in .cpp
MyUsefulClass::doSomethingUseful()
{
// ...
_myService->doService1();
// ...
_myService->doService2();
}
This way is usually considered better as the coupling between class is lighter. Nevertheless, for some services, which are well known to be of widespread use in a framework, it is simplier to use a singleton. It makes sense for a single service that is the service which give you access to all other services in a framework for example ^^ It is often use for technical services like logging for instance.
my2c
Edit: I read the article, as the focus is on AbstractFactories, the use of a singleton is a casual one, not a design decision. It is understandable in an article in which you do not want to write things that will not get you to your point.