I disagree⦠probably they are not well used, but this is the meaning of each selector: - #uniqueInstance. As it says⦠a pure singleton. example: Author class>>#uniqueInstance. Ideally, classes using this method also cancels #new. - #default. It gives you a default instance (as name says), but you can also create instances of it, for other uses. example: RPackageOrganizer class>>#default. - #current. It gives you a singleton, but something that can change under certain circumstances, like a UI theme or a platform change. example: OSPlatform class>>#current. so⦠I do agree there are a lot of wrong uses there, that needs to be fixed⦠but each of the used selectors have a meaning, and a different meaning than the others. cheers, Esteban
On 08 Apr 2015, at 11:31, Christophe Demarey <Christophe.Demarey@inria.fr> wrote:
Hi,
We use quite often the singleton pattern but when I need to use one, I always need to ask myself "What is the selector to get this singleton?". We use either aClass>>current, aClass>>default or aClass>>uniqueInstance. Could we agree on the selector to use and update existing code?
To get a quick overview, I searched about these methods in a Pharo4 image and get these results: ((SystemNavigation default allImplementorsOf: #default) select: #isMetaSide) size. "45" ((SystemNavigation default allImplementorsOf: #current) select: #isMetaSide) size. "40" ((SystemNavigation default allImplementorsOf: #uniqueInstance) select: #isMetaSide) size. "19"
Your opinion?
Christophe.