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 <[email protected]> 
> 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.


Reply via email to