D'abord, singletonobj
est un nom faux/confus. Singletons sont appelés sur une base de classe, comme:
Log::getInstance().doSomething();
et non
Log log = new Log;
log.getInstance().doSomething();
Donc, cela devrait répondre à la question, mais je vais quand même :) détail
Log::doSomething();
forcerait doSomething()
pour être une méthode statique, tandis que
Log::getInstance().doSomething();
a doSomething()
comme méthode d'instance.
Pourquoi utiliser getInstance()
? Parce qu'un singleton, par sa définition même, ne devrait avoir que zéro ou une instance. En rendant le constructeur d'un singleton privé et en publiant la méthode getInstance()
, il vous permet de contrôler le nombre d'instances de cette classe. Le constructeur privé est simplement pour éviter que d'autres classes utilisent cette classe, ce qui irait à l'encontre du but de cette classe étant un singleton, car vous ne seriez pas capable de contrôler le nombre d'instances de cette classe.
@ m0skit0: Bien sûr ... –