GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
singleton(n) TclOO Commands singleton(n)


oo::singleton - a class that does only allows one instance of itself

package require tcl::oo
oo::singleton method ?arg ...?

oo::objectoo::classoo::singleton

Singleton 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.

The 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.

The 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).

cls new ?arg ...?
This returns the current instance of the singleton class, if one exists, and creates a new instance only if there is no existing instance. The additional arguments, arg ..., are only used if a new instance is actually manufactured; that construction is via the oo::class class's new method.

This is an override of the behaviour of a superclass's method with an identical call signature to the superclass's implementation.

The 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.

This 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.

oo::class(n)

class, metaclass, object, single instance
0.3 TclOO

Search for    or go to Top of page |  Section n |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.