Stéphane Ducasse 1
Stéphane Ducasse
stephane.ducasse@inria.fr
http://stephane.ducasse.free.fr/
Singleton
S.Ducasse 2
Singleton’s Intent
Ensure that a class has only
one instance, and provide a
global point of access to it
S.Ducasse 3
Problem / Solution
Problem:We want a class with a unique instance.
Solution:
Store the first time an instance ...
S.Ducasse 4
Example
db := DBConnect default.
db2 := DBConnect default.
db2 == db2
> true
Yes we get only one instance
S.Ducasse 5
Example
Object subclass: #DBConnect
instanceVariableNames: ''
classVariableNames: 'UniqueInstance'
poolDiction...
S.Ducasse 6
Implementation
NetworkManager class>>new
self error:‘should use uniqueInstance’
NetworkManager class>>uniqueIn...
S.Ducasse 7
Implementation Issues
Singletons may be accessed via a global variable
Pharo 1.1
Smalltalk points to Smalltalk...
S.Ducasse 8
GlobalVariable or Class Method Access
GlobalVariable Access is dangerous: if we reassign
Smalltalk we lose all...
S.Ducasse 9
Implementation Issues
Persistent Singleton: only one instance exists and
its identity does not change
Transien...
S.Ducasse 10
classVariable or class instance variable
classVariable (shared variable)
One singleton for a complete hierarc...
S.Ducasse 11
Access?
In Smalltalk we cannot prevent a client to send a
message (protected in C++).To prevent additional
cr...
S.Ducasse 12
Access using new: not good idea
DBConnect class>>new
^self uniqueInstance
The intent (uniqueness) is not clea...
S.Ducasse 13
new vs uniqueInstance
The difference between #new and #uniqueInstance
is that #new potentially initializes a ...
S.Ducasse 14
Favor Instance Behavior
When a class should only have one instance, it is
tempting to define all its behavior...
S.Ducasse 15
Time and not Scope
Singleton is about time not access
time: only one instance is available at the same time
a...
Upcoming SlideShare
Loading in...5
×

Stoop 432-singleton

437

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
437
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Stoop 432-singleton

  1. 1. Stéphane Ducasse 1 Stéphane Ducasse stephane.ducasse@inria.fr http://stephane.ducasse.free.fr/ Singleton
  2. 2. S.Ducasse 2 Singleton’s Intent Ensure that a class has only one instance, and provide a global point of access to it
  3. 3. S.Ducasse 3 Problem / Solution Problem:We want a class with a unique instance. Solution: Store the first time an instance is created and return it each time a new instance is requested.
  4. 4. S.Ducasse 4 Example db := DBConnect default. db2 := DBConnect default. db2 == db2 > true Yes we get only one instance
  5. 5. S.Ducasse 5 Example Object subclass: #DBConnect instanceVariableNames: '' classVariableNames: 'UniqueInstance' poolDictionaries: '' category: 'MyDB'
  6. 6. S.Ducasse 6 Implementation NetworkManager class>>new self error:‘should use uniqueInstance’ NetworkManager class>>uniqueInstance UniqueInstance isNil ifTrue: [ UniqueInstance := self basicNew initialize]. ^UniqueInstance
  7. 7. S.Ducasse 7 Implementation Issues Singletons may be accessed via a global variable Pharo 1.1 Smalltalk points to SmalltalkImage current Global access is good to get shorter expression Smalltalk vs SmalltalkImage current But this should be more the exception than the rule
  8. 8. S.Ducasse 8 GlobalVariable or Class Method Access GlobalVariable Access is dangerous: if we reassign Smalltalk we lose all references to the current SmalltalkImage Class Method Access is better because it provides a single access point.This class is responsible for the singleton instance (creation, initialization,...).
  9. 9. S.Ducasse 9 Implementation Issues Persistent Singleton: only one instance exists and its identity does not change Transient Singleton: only one instance exists at any time, but that instance changes Single Active Instance Singleton: a single instance is active at any point in time, but other dormant instances may also exist.
  10. 10. S.Ducasse 10 classVariable or class instance variable classVariable (shared variable) One singleton for a complete hierarchy Class instance variable One singleton per class
  11. 11. S.Ducasse 11 Access? In Smalltalk we cannot prevent a client to send a message (protected in C++).To prevent additional creation we can redefine new/new: DBConnect class>>new self error:‘Class ‘, self name,‘ cannot create new instances’ 11
  12. 12. S.Ducasse 12 Access using new: not good idea DBConnect class>>new ^self uniqueInstance The intent (uniqueness) is not clear anymore! new is normally used to return newly created instances. Not intention revealing
  13. 13. S.Ducasse 13 new vs uniqueInstance The difference between #new and #uniqueInstance is that #new potentially initializes a new instance, while #uniqueInstance only returns the unique instance (there is no initialization) Do we want to communicate that the class has a singleton? new? defaultInstance? uniqueInstance?
  14. 14. S.Ducasse 14 Favor Instance Behavior When a class should only have one instance, it is tempting to define all its behavior at the class level. This is not optimal: Class behavior represents behavior of classes:“Ordinary objects are used to model the real world. MetaObjects describe these ordinary objects” Now yes this may be tedious to type DBConnect current reconnect instead of DBConnect reconnect What’s happens if later on an object can have multiple instances?You have to change a lot of
  15. 15. S.Ducasse 15 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 It is worth to have one extra instance variable that refers to the right object
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×