mirror of
https://github.com/lxsang/Diya-API.git
synced 2024-12-27 03:48:21 +01:00
49 lines
1.1 KiB
Smalltalk
49 lines
1.1 KiB
Smalltalk
Class {
|
|
#name : #DiyaSingleton,
|
|
#superclass : #DiyaBaseObject,
|
|
#classVars : [
|
|
'singletons'
|
|
],
|
|
#category : #'Diya-Core'
|
|
}
|
|
|
|
{ #category : #'instance creation' }
|
|
DiyaSingleton class >> cleanUpInstance: singleton [
|
|
"do nothing for now"
|
|
]
|
|
|
|
{ #category : #'class initialization' }
|
|
DiyaSingleton class >> initialize [
|
|
singletons := Dictionary new.
|
|
]
|
|
|
|
{ #category : #'instance creation' }
|
|
DiyaSingleton class >> new [
|
|
^ DiyaCoreAPIError signal: 'Use #uniqueInstance'
|
|
]
|
|
|
|
{ #category : #'instance creation' }
|
|
DiyaSingleton class >> reset [
|
|
|singleton key|
|
|
key := self class asString asSymbol.
|
|
singleton := singletons at: key ifAbsent: [ ^ self ].
|
|
self cleanUpInstance: singleton.
|
|
singletons removeKey: key
|
|
]
|
|
|
|
{ #category : #'instance creation' }
|
|
DiyaSingleton class >> resetAll [
|
|
self allSubclasses do:[:e| e reset]
|
|
]
|
|
|
|
{ #category : #'instance creation' }
|
|
DiyaSingleton class >> uniqueInstance [
|
|
^singletons at: self class asString asSymbol ifAbsentPut: [ super new ].
|
|
]
|
|
|
|
{ #category : #initialization }
|
|
DiyaSingleton >> initialize [
|
|
super initialize.
|
|
Transcript show: 'Initialise unique instance of ', self className; cr.
|
|
]
|