Singleton
From CacheWiki
Class Definition
Class PlacidSky.Singleton Extends %RegisteredObject
{
Method %OnNew(initvalue As %CacheString) As %Status [ Private, ProcedureBlock = 1, ServerOnly = 1 ] {
Set Obj="",Found=0
For {
Set Obj=$zobjnext(Obj)
If Obj="" Quit
If Obj=##this Continue
If Obj.%ClassName(1)=..%ClassName(1) {
Set Found=1
Quit
}
}
If Found {
Quit $$$ERROR($$$GeneralError,..%ClassName(1)_" already instantiated")
}
Quit $$$OK
}
ClassMethod Get() as PlacidSky.Singleton {
Set Obj="",Found=0
For {
Set Obj=$zobjnext(Obj)
If Obj="" Quit
If Obj.%ClassName(1)=..%ClassName(1) {
Set Found=1
Quit
}
}
If Found {
Quit Obj
}
Quit ..%New()
}
}
Usage
LSP200>s o1=##class(PlacidSky.Singleton).%New() LSP200>w o1=<OBJECT REFERENCE>[1@PlacidSky.Singleton] LSP200>s o2=##class(PlacidSky.Singleton).%New() LSP200>w %objlasterror="0 _��?�*PlacidSky.Singleton already instantiated(%OnNew+11^PlacidSky.Singleton.3:LSP200" o1=<OBJECT REFERENCE>[1@PlacidSky.Singleton] o2="" LSP200>s o3=##class(PlacidSky.Singleton).Get() LSP200>w %objlasterror="0 _��?�*PlacidSky.Singleton already instantiated(%OnNew+11^PlacidSky.Singleton.3:LSP200" o1=<OBJECT REFERENCE>[1@PlacidSky.Singleton] o2="" o3=<OBJECT REFERENCE>[1@PlacidSky.Singleton]
This information originally posted here