STOOP-432-Singleton.Pdf

STOOP-432-Singleton.Pdf

Singleton !"#$ !"#$ Ensure that a class has only one instance, and provide a Singleton global point of access to it Stéphane Ducasse [email protected] http://stephane.ducasse.free.fr/ S.Ducasse Stéphane Ducasse 1 2 The Singleton Pattern Singleton Possible Structure !"#$ !"#$ • Intent: Ensure that a class has only one instance, and provide a global point of access to it • Problem: We want a class with a unique instance. • Solution: We specialize the #new class method so that if one instance already exists this will be the only one. When the first instance is created, we store and return it as result of #new. S.Ducasse S.Ducasse 3 4 The Singleton Pattern The Singleton Pattern !"#$ !"#$ |aLan| • Providing access to the unique instance is not aLan := NetworkManager new aLan == LAN new -> true always necessary. aLan uniqueInstance == NetworkManager new -> true !! ! ! • It depends on what we want to express. The NetWorkManager class ! instanceVariableNames: 'uniqueInstance ' difference between #new and #uniqueInstance is that #new potentially initializes a new instance, NetworkManager class>>new while #uniqueInstance only returns the unique self error: ‘should use uniqueInstance’ instance (there is no initialization) ! NetworkManager class>>uniqueInstance uniqueInstance isNil • Do we want to communicate that the class has a !! ifTrue: [ uniqueInstance := self basicNew initialize]. singleton? new? defaultInstance? S.Ducasse S.Ducasse 5 6 Implementation Issues Implementation Issues !"#$ !"#$ • Singletons may be accessed via a global variable (ex: Persistent Singleton: only one instance exists NotificationManager uniqueInstance notifier). !! SessionModel>>startupWindowSystem and its identity does not change (ex: !! ! “Private - Perform OS window system startup” NotifierManager in Visual Smalltalk) !! ! Notifier initializeWindowHandles. !! ! ... !! ! oldWindows := Notifier windows. Transient Singleton: only one instance exists at !! ! Notifier initialize. !! ! ... any time, but that instance changes (ex: !! ! ^oldWindows SessionModel in Visual Smalltalk, • Global Variable or Class Method Access SourceFileManager, Screen in VisualWorks) – Global Variable Access is dangerous: if we reassign Notifier we lose all references to the current window. – Class Method Access is better because it provides a single access point. This class is responsible for the singleton instance Single Active Instance Singleton: a single (creation, initialization,...). S.Ducasse S.Ducasse 8 7 Implementation Issues Access? !"#$ !"#$ classVariable or class instance variable In Smalltalk we cannot prevent a client to send a classVariable message (protected in C++). To prevent additional One singleton for a complete hierarchy creation we can redefine new/new: Class instance variable One singleton per class Object subclass: #Singleton ! instanceVariableNames: ‘uniqueInstance’ ! classVariableNames: ‘’ ! poolDictionaries: ‘’ Singleton class>>new S.Ducasse 9 S.Ducasse 10 Access using new: not good idea Favor Instance Behavior !"#$ !"#$ Singleton class>>new When a class should only have one instance, it !!^self uniqueInstance could be tempting to define all its behavior at the class level. But this is not good: The intent (uniqueness) is not clear anymore! New Class behavior represents behavior of classes: “Ordinary is normally used to return newly created instances. objects are used to model the real world. MetaObjects The programmer does not expect this: describe these ordinary objects” Do not mess up this separation and do not mix domain !!! |screen1 screen2| objects with metaconcerns. !!! screen1 := Screen new. !!! screen2 := Screen uniqueInstance S.Ducasse 11 S.Ducasse 12 Time and not Scope !"#$ Singleton is about time not access time: only one instance is available at the same time access: can’t you add an instance to refer to the object? Singleton for access are as bad as global variables Often we can avoid singleton by passing/referring to the object instead of favoring a global access point S.Ducasse 13.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    4 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us