Singleton

From CacheWiki
Jump to: navigation, search

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

Personal tools