|
NAMEoo::singleton - a class that does only allows one instance of itselfSYNOPSISpackage require tcl::oo oo::singleton method ?arg ...? CLASS HIERARCHYoo::object → oo::class → oo::singleton DESCRIPTIONSingleton classes are classes that only permit at most one instance of themselves to exist. They unexport the create and createWithNamespace methods entirely, and override the new method so that it only makes a new instance if there is no existing instance. It is not recommended to inherit from a singleton class; singleton-ness is not inherited. It is not recommended that a singleton class's constructor take any arguments.Instances have their destroy method overridden with a method that always returns an error in order to discourage destruction of the object, but destruction remains possible if strictly necessary (e.g., by destroying the class or using rename to delete it). They also have a (non-exported) <cloned> method defined on them that similarly always returns errors to make attempts to use the singleton instance with oo::copy fail. CONSTRUCTORThe oo::singleton class does not define an explicit constructor; this means that it is effectively the same as the constructor of the oo::class class.DESTRUCTORThe oo::singleton class does not define an explicit destructor; destroying an instance of it is just like destroying an ordinary class (and will destroy the singleton object).EXPORTED METHODS
This is an override of the behaviour of a superclass's method with an identical call signature to the superclass's implementation. NON-EXPORTED METHODSThe oo::singleton class explicitly states that create and createWithNamespace are unexported; callers should not assume that they have control over either the name or the namespace name of the singleton instance.EXAMPLEThis example demonstrates that there is only one instance even though the new method is called three times.oo::singleton create Highlander { method say {} { puts "there can be only one" } } set h1 [Highlander new] set h2 [Highlander new] if {$h1 eq $h2} { puts "equal objects" → prints "equal objects" } set h3 [Highlander new] if {$h1 eq $h3} { puts "equal objects" → prints "equal objects" } Note that the name of the instance of the singleton is not guaranteed to be anything in particular. SEE ALSOoo::class(n)KEYWORDSclass, metaclass, object, single instance
Visit the GSP FreeBSD Man Page Interface. |