Singleton: Difference between revisions

m
syntax highlighting fixup automation
(Added Epoxy)
m (syntax highlighting fixup automation)
Line 6:
 
=={{header|ActionScript}}==
<langsyntaxhighlight lang="actionscript">package
{
public class Singleton
Line 25:
}
 
internal class SingletonEnforcer {}</langsyntaxhighlight>
 
=={{header|Ada}}==
===Non Thread Safe===
<langsyntaxhighlight lang="ada">package Global_Singleton is
procedure Set_Data (Value : Integer);
function Get_Data return Integer;
Line 38:
end record;
Instance : Instance_Type;
end Global_Singleton;</langsyntaxhighlight>
 
<langsyntaxhighlight lang="ada">package body Global_Singleton is
 
--------------
Line 60:
end Get_Data;
 
end Global_Singleton;</langsyntaxhighlight>
 
===Thread Safe===
<langsyntaxhighlight lang="ada">package Protected_Singleton is
procedure Set_Data (Value : Integer);
function Get_Data return Integer;
Line 73:
Data : Integer := 0;
end Instance_Type;
end Protected_Singleton;</langsyntaxhighlight>
 
<langsyntaxhighlight lang="ada">package body Protected_Singleton is
 
--------------
Line 121:
end Instance;
 
end Protected_Singleton;</langsyntaxhighlight>
 
=={{header|AutoHotkey}}==
{{works with | AutoHotkey_L}}
Translation of python borg pattern
<langsyntaxhighlight AutoHotkeylang="autohotkey">b1 := borg()
b2 := borg()
msgbox % "b1 is b2? " . (b1 == b2)
Line 153:
brg[1, name] := val
Return val
}</langsyntaxhighlight>
 
=={{header|C}}==
Since C doesn't really support classes anyhow, there's not much to do. If you want somethin akin to a singleton, what you do is first declare the interface functions in a header (.h) file.
<langsyntaxhighlight lang="c">#ifndef SILLY_H
#define SILLY_H
 
Line 163:
extern int PlayFetchWithDog( float weightOfStick);
 
#endif</langsyntaxhighlight>
Then in a separate C source (.c) file, define your structures, variables and functions.
<langsyntaxhighlight lang="c">...
#include "silly.h"
 
Line 189:
{ ...
if(weightOfStick < lazyDog.max_stick_weight){...
}</langsyntaxhighlight>
Code using the singleton includes the header and cannot create a
struct sDog as the definition is only in the C source (or other header privately included by the silly.c source). Only the functions declared in the header may be used externally.
<langsyntaxhighlight lang="c">...
#include "silly.h"
...
Line 198:
JumpOverTheDog( 4);
retrieved = PlayFetchWithDog( 3.1);
...</langsyntaxhighlight>
 
=={{header|C sharp|C#}}==
Line 204:
Performance suffers because the lock is acquired every time Instance is accessed.<br />
This implementation is extremely slow and should not be used (but is seen often).
<langsyntaxhighlight lang="csharp">public sealed class Singleton1 //Lazy: Yes ||| Thread-safe: Yes ||| Uses locking: Yes
{
private static Singleton1 instance;
Line 219:
}
}
}</langsyntaxhighlight>
 
===Fixes excessive locking by double-checking for null.===
Still uses locking and implementation is ugly and verbose.
<langsyntaxhighlight lang="csharp">public sealed class Singleton2 //Lazy: Yes ||| Thread-safe: Yes ||| Uses locking: Yes, but only once
{
private static Singleton2 instance;
Line 240:
}
}
}</langsyntaxhighlight>
 
===Really simple implementation without locking.===
It still is not completely lazy. If there are other static members, accessing any of those will still cause initialization.
<langsyntaxhighlight lang="csharp">public sealed class Singleton3 //Lazy: Yes, but not completely ||| Thread-safe: Yes ||| Uses locking: No
{
private static Singleton3 Instance { get; } = new Singleton3();
static Singleton3() { }
}</langsyntaxhighlight>
 
===Truly lazy by using an inner class.===
This version is completely lazy but the code looks more complicated than it needs to be.
<langsyntaxhighlight lang="csharp">public sealed class Singleton4 //Lazy: Yes ||| Thread-safe: Yes ||| Uses locking: No
{
public static Singleton4 Instance => SingletonHolder.instance;
Line 263:
internal static readonly Singleton4 instance = new Singleton4();
}
}</langsyntaxhighlight>
 
===Using Lazy<T>===
C# has a dedicated type for lazy initialization: Lazy<T>.<br />
It makes implementing a Singleton really easy. Recommended.
<langsyntaxhighlight lang="csharp">public sealed class Singleton5 //Lazy: Yes ||| Thread-safe: Yes ||| Uses locking: No
{
private static readonly Lazy<Singleton5> lazy = new Lazy<Singleton5>(() => new Singleton5());
public static Singleton5 Instance => lazy.Value;
}</langsyntaxhighlight>
 
=={{header|C++}}==
A generic singleton template class (implemented via the "Curiously Recurring Template Pattern"[https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern]). Warning: if using a version of C++ prior to C++11, a [[Mutex#C|mutex]] (or similar) is required to access static variables within a multi-threaded program.
 
<langsyntaxhighlight lang="cpp">
#include <stdexcept>
 
Line 378:
controller::instance().work();
}
</syntaxhighlight>
</lang>
 
=={{header|Caché ObjectScript}}==
Line 384:
In Caché, each job runs in a self-contained execution environment (i.e. a separate process instead of a thread). However, it is possible for each process to share data through multidimensional storage (global variables). This is because when the Caché virtual machine starts, it allocates a single, large chunk of shared memory to allow all Caché processes to access this data simultaneously. However, it is the responsibility of the application developer to ensure read and write access to objects is properly co-ordinated (or 'synchronized') between processes to prevent concurrency problems. Also, Caché defines any global variable whose name starts with 'CacheTemp' as being temporary, which means changes are not usually written to disk and are instead maintained within the in-memory buffer pool.
 
<langsyntaxhighlight lang="cos">
/// The <CLASS>Singleton</CLASS> class represents a global singleton object that can
/// be instantiated by multiple processes. The 'Get' class method is used to obtain
Line 516:
 
}
</syntaxhighlight>
</lang>
 
{{out|Examples}}
Line 530:
 
For a simple example, the following program constructs English sentences without worrying about extra space occurring at points where no text (<code>the-empty-phrase</code>, our singleton) is inserted.
<langsyntaxhighlight lang="lisp">(defgeneric concat (a b)
(:documentation "Concatenate two phrases."))
 
Line 553:
(dolist (q (list 'the-empty-phrase
(make-instance 'nonempty-phrase :text "up the hill")))
(write-line (text (reduce #'concat (list before p mid q after))))))))</langsyntaxhighlight>
Thread safety is irrelevant since the singleton is created at load time, not first access.
 
=={{header|D}}==
<langsyntaxhighlight lang="d">module singleton ;
import std.stdio ;
import std.thread ;
Line 617:
 
x.wait ; y.wait ; z.wait ;
}</langsyntaxhighlight>
{{out}}
<pre>>>Mary come in.
Line 641:
=={{header|Delphi}} and {{header|Pascal}}==
Detailed explanation [http://www.yanniel.info/2010/10/singleton-pattern-delphi.html here]. (Delphi started out as an object-oriented version of Pascal.)
<langsyntaxhighlight Delphilang="delphi">unit Singleton;
 
interface
Line 680:
end;
 
end.</langsyntaxhighlight>
 
=={{header|E}}==
Since E uses closure-style objects rather than classes, a singleton is simply an object which is defined at the top level of the program, not inside any method. There are no thread-safety issues since the singleton, like every other object, belongs to some particular [http://www.erights.org/elib/concurrency/vat.html vat] (but can be remotely invoked from other vats).
<langsyntaxhighlight lang="e">def aSingleton {
# ...
}</langsyntaxhighlight>
 
=={{header|Eiffel}}==
Line 693:
 
'''Implementation:'''
<langsyntaxhighlight Eiffellang="eiffel">class
SINGLETON
create {SINGLETON_ACCESS}
Line 699:
feature
-- singleton features go here
end</langsyntaxhighlight>
<langsyntaxhighlight Eiffellang="eiffel">frozen class
SINGLETON_ACCESS
feature
Line 709:
Result /= Void
end
end</langsyntaxhighlight>
'''Usage:'''
<langsyntaxhighlight Eiffellang="eiffel">s: SINGLETON -- declaration somewhere
 
s := (create{SINGLETON_ACCESS}).singleton -- in some routine</langsyntaxhighlight>
 
=={{header|Elena}}==
Stateless singleton
<langsyntaxhighlight lang="elena">
singleton Singleton
{
// ...
}
</syntaxhighlight>
</lang>
Normal singleton
<langsyntaxhighlight lang="elena">class Singleton
{
object theField;
Line 731:
}
 
static singleton = new Singleton();</langsyntaxhighlight>
 
=={{header|Epoxy}}==
<langsyntaxhighlight lang="epoxy">fn Singleton()
if this.self then return this.self cls
var new: {}
Line 757:
NewSingleton>>setName("Test")
 
log(MySingleton.name) --Test</langsyntaxhighlight>
{{out}}
<pre>
Line 767:
=={{header|Erlang}}==
Erlang is not object-oriented, so there is no such thing as a singleton class. The singleton is something of an anti-pattern in Erlang, so if you are tempted to do this, there is probably a better architecture. If you do want something akin to a singleton, you start and register a process that maintains its state in a message loop and provides its state to anyone that wants it or needs to change it. Since this is done with message passing, it's safe for concurrent use.
<langsyntaxhighlight Erlanglang="erlang">-module(singleton).
 
-export([get/0, set/1, start/0]).
Line 799:
From ! ok,
loop(NewValue)
end.</langsyntaxhighlight>
 
Here is an example of how to use it (from the shell). It assumes singleton:start/0 was already called from the supervisor tree (as would be typical if you were using something like this).
 
<langsyntaxhighlight Erlanglang="erlang">1> singleton:get().
not_set
2> singleton:set(apple).
Line 816:
ok
7> singleton:get().
{ok,42}</langsyntaxhighlight>
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USING: classes.singleton kernel io prettyprint ;
IN: singleton-demo
 
SINGLETON: bar
GENERIC: foo ( obj -- )
M: bar foo drop "Hello!" print ;</langsyntaxhighlight>
( scratchpad ) bar foo
Hello!
Line 834:
Needs the FMS-SI (single inheritance) library code located here:
http://soton.mpeforth.com/flag/fms/index.html
<langsyntaxhighlight lang="forth">include FMS-SI.f
\ A singleton is created by using normal Forth data
Line 862:
s1 printb \ => 9
s2 printa \ => 4
</syntaxhighlight>
</lang>
 
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">
REM Sacado del forum de FreeBASIC (https://www.freebasic.net/forum/viewtopic.php?t=20432)
 
Line 916:
Delete ps3
Sleep
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 929:
 
From the Go standard library, sync.Once provides a way to ensure that some "step," effectively an initialization step, is performed no more than once even if it might be attempted from multiple concurrent goroutines. This capability might be considered similar to some mechanism ensuring that singleton constructor code is only run once.
<langsyntaxhighlight lang="go">package main
 
import (
Line 959:
w.Wait()
log.Println("after trying both, instance =", instance)
}</langsyntaxhighlight>
{{out}}
<pre>
Line 974:
 
Because packages cannot be imported multiple times, data declared at package level will only ever have a single instance, and the package as a whole serves as a singleton.
<langsyntaxhighlight lang="go">package singlep
 
// package level data declarations serve as singleton instance variables
Line 987:
func F() int {
return Y - X
}</langsyntaxhighlight>
Example program using the package:
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,000:
fmt.Println(singlep.X, singlep.Y)
fmt.Println(singlep.F())
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,011:
This example combines the two previous concepts and also shows some additional concepts. It has packages imported with a "diamond" dependency. While both <code>red</code> and <code>blue</code> import <code>single</code>, only a single variable <code>color</code> will exist in memory. The <code>init()</code> mechanism shown above actually runs before <code>main()</code>. In contrast, the <code>sync.Once</code> mechanism can serve as constructor code after <code>main()</code> begins.
 
<langsyntaxhighlight lang="go">package single
 
import (
Line 1,034:
once.Do(func() { color = c })
log.Println("color initialized to", color)
}</langsyntaxhighlight>
<langsyntaxhighlight lang="go">package red
 
import (
Line 1,046:
log.Println("trying to set red")
single.SetColor("red")
}</langsyntaxhighlight>
<langsyntaxhighlight lang="go">package blue
 
import (
Line 1,058:
log.Println("trying to set blue")
single.SetColor("blue")
}</langsyntaxhighlight>
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,082:
}
log.Println(single.Color())
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,095:
 
=={{header|Groovy}}==
<langsyntaxhighlight lang="groovy">@Singleton
class SingletonClass {
 
Line 1,105:
SingletonClass.instance.invokeMe()
}
}</langsyntaxhighlight>
{{out}}
<pre>invoking method of a singleton class</pre>
Line 1,111:
==Icon and {{header|Unicon}}==
Icon is not object oriented, but Unicon supports O-O programming.
<langsyntaxhighlight lang="unicon">class Singleton
method print()
write("Hi there.")
Line 1,123:
Singleton().print()
Singleton().print()
end</langsyntaxhighlight>
 
This Unicon example uses a number of Icon features.
Line 1,135:
=={{header|Io}}==
Io does not have globals. But it is easy to make singleton objects:
<langsyntaxhighlight lang="io">Singleton := Object clone
Singleton clone = Singleton</langsyntaxhighlight>
 
=={{header|J}}==
Line 1,146:
===Thread-safe===
[[wp:Double-checked locking]]; only use with Java 1.5+
<langsyntaxhighlight lang="java">class Singleton
{
private static Singleton myInstance;
Line 1,171:
 
// Any other methods
}</langsyntaxhighlight>
 
===Thread-Safe Lazy-Loaded===
This is the [[wp:Initialization-on-demand holder idiom]].
<langsyntaxhighlight lang="java">public class Singleton {
private Singleton() {
// Constructor code goes here.
Line 1,187:
return LazyHolder.INSTANCE;
}
}</langsyntaxhighlight>
 
===Non-Thread-Safe===
<langsyntaxhighlight lang="java">class Singleton
{
private static Singleton myInstance;
Line 1,209:
 
// Any other methods
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
<langsyntaxhighlight JavaScriptlang="javascript">function Singleton() {
if(Singleton._instance) return Singleton._instance;
this.set("");
Line 1,231:
c.append("!!!");
 
document.write( (new Singleton()).get() );</langsyntaxhighlight>
 
=={{header|Julia}}==
Julia allows singletons as type declarations without further specifiers. There can be only one instance of such a type, and if more than one variable is bound to such a type they are actually all bound to the same instance in memory:
<langsyntaxhighlight lang="julia">
struct IAmaSingleton end
 
Line 1,242:
 
println("x == y is $(x == y) and x === y is $(x === y).")
</syntaxhighlight>
</lang>
 
=={{header|Kotlin}}==
Kotlin has built-in support for singletons via object declarations. To refer to the singleton, we simply use its name which can be any valid identifier other than a keyword:
<langsyntaxhighlight lang="scala">// version 1.1.2
 
object Singleton {
Line 1,254:
fun main(args: Array<String>) {
Singleton.speak()
}</langsyntaxhighlight>
 
{{out}}
Line 1,267:
===Server wide singleton===
 
<langsyntaxhighlight Lassolang="lasso">// Define the thread if it doesn't exist
// New definition supersede any current threads.
Line 1,283:
#b->switch = 'b'
 
#a->switch // b</langsyntaxhighlight>
 
===Thread level singleton===
 
<langsyntaxhighlight Lassolang="lasso">// Define thread level singleton
 
define singleton => type {
Line 1,302:
#b->switch = 'b'
 
#a->switch // b</langsyntaxhighlight>
 
=={{header|Latitude}}==
Latitude objects are prototypes, so any new object can be treated as a singleton by simply not cloning it. For added security, one can always override <code>clone</code> to make it clear that the object should not be cloned, but this is generally overkill.
<langsyntaxhighlight lang="latitude">Singleton ::= Object clone tap {
self id := 0.
self newID := {
Line 1,318:
println: Singleton newID. ; 1
println: Singleton newID. ; 2
println: Singleton newID. ; 3</langsyntaxhighlight>
 
=={{header|Lingo}}==
In Lingo a Singleton class can be implemented like this:
<langsyntaxhighlight lang="lingo">-- parent script "SingletonDemo"
 
property _instance
Line 1,343:
me._someProperty = me._someProperty + x
return me._someProperty
end</langsyntaxhighlight>
 
=={{header|Logtalk}}==
Logtalk supports both classes and prototypes. A prototype is a much simpler solution for defining a singleton object than defining a class with only an instance.
<langsyntaxhighlight lang="logtalk">:- object(singleton).
 
:- public(value/1).
Line 1,362:
state(0).
 
:- end_object.</langsyntaxhighlight>
A simple usage example after compiling and loading the code above:
<langsyntaxhighlight lang="logtalk">| ?- singleton::value(Value).
Value = 0
yes
Line 1,370:
| ?- singleton::(set_value(1), value(Value)).
Value = 1
yes</langsyntaxhighlight>
 
=={{header|NetRexx}}==
Uses a static field to avoid synchronization problems and the ''flawed'' &quot;double-checked locking&quot; idiom in JVMs. See [http://www.ibm.com/developerworks/java/library/j-dcl/index.html www.ibm.com/developerworks/java/library/j-dcl/index.html] for a detailed explanation.
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref symbols binary
 
Line 1,472:
return info
 
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,502:
=={{header|Nim}}==
In the file <code>singleton.nim</code> we don't export the type, so new objects can't be created:
<langsyntaxhighlight lang="nim">type Singleton = object # Singleton* would export
foo*: int
 
var single* = Singleton(foo: 0)</langsyntaxhighlight>
Then in another file we can use the singleton object:
<langsyntaxhighlight lang="nim">import singleton
 
single.foo = 12
echo single.foo</langsyntaxhighlight>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">class Singleton {
@singleton : static : Singleton;
 
Line 1,530:
...
}
}</langsyntaxhighlight>
 
=={{header|Objective-C}}==
===Non-Thread-Safe===
(Using Cocoa/OpenStep's NSObject as a base class)
<langsyntaxhighlight lang="objc">// SomeSingleton.h
@interface SomeSingleton : NSObject
{
Line 1,543:
+ (SomeSingleton *)sharedInstance;
 
@end</langsyntaxhighlight>
 
<langsyntaxhighlight lang="objc">// SomeSingleton.m
@implementation SomeSingleton
 
Line 1,582:
}
 
@end</langsyntaxhighlight>
 
===Thread-Safe===
Same as above except:
<langsyntaxhighlight lang="objc">+ (SomeSingleton *) sharedInstance
{
static SomeSingleton *sharedInstance = nil;
Line 1,595:
}
return sharedInstance;
}</langsyntaxhighlight>
 
===With GCD===
Same as above except:
<langsyntaxhighlight lang="objc">+ (SomeSingleton *) sharedInstance
{
static SomeSingleton *sharedInstance = nil;
Line 1,607:
});
return sharedInstance;
}</langsyntaxhighlight>
 
===With class methods===
Line 1,624:
For instance, this Sequence class creates instances that increment an integer and send it. If a task tries to get the next value before it is incremented, it will wait until the channel is no more empty and holds the new value. This won't work if the value is a mutable value (you will get an exception if you try to send a mutable object into channel). A mutable object can't be shared between tasks. Here we send a new integer each time.
 
<langsyntaxhighlight Oforthlang="oforth">Object Class new: Sequence(channel)
Sequence method: initialize(initialValue)
Channel newSize(1) := channel
@channel send(initialValue) drop ;
 
Sequence method: nextValue @channel receive dup 1 + @channel send drop ;</langsyntaxhighlight>
 
Usage :
<langsyntaxhighlight Oforthlang="oforth">import: parallel
 
: testSequence
| s i |
Sequence new(0) ->s
100 loop: i [ #[ s nextValue println ] & ] ;</langsyntaxhighlight>
 
=={{header|ooRexx}}==
<syntaxhighlight lang="oorexx">
<lang ooRexx>
a = .singleton~new
b = .singleton~new
Line 1,673:
a singleton.
::attribute foo
</syntaxhighlight>
</lang>
 
=={{header|OxygenBasic}}==
 
<langsyntaxhighlight lang="oxygenbasic">
Class Singleton
static sys inst 'private
Line 1,690:
new Singleton MySingleton
'endif
</langsyntaxhighlight>
 
=={{header|Oz}}==
Singleton is not a common pattern in Oz programs. It can be implemented by limiting the scope of the class definition such that only the <code>GetInstance</code> function has access to it.
<langsyntaxhighlight lang="oz">declare
local
class Singleton
Line 1,712:
end
end
end</langsyntaxhighlight>
This will work as long as all functors are linked with <code>import</code> statements. If you use multiple calls to <code>Module.link</code> instead, you will get multiple instances of the "Singleton".
 
=={{header|Perl}}==
<langsyntaxhighlight Perllang="perl">package Singleton;
use strict;
use warnings;
Line 1,744:
 
my $s2 = Singleton->new;
printf "name: %s, ref: %s\n", $s2->name, $s2;</langsyntaxhighlight>
 
=={{header|Phix}}==
Line 1,751:
or keep check() private and invoke it internally from a few critical routines.
Needs 0.8.1+
<langsyntaxhighlight Phixlang="phix">-- <separate include file>
object chk = NULL
class singleton
Line 1,769:
 
s.check()
--s2.check() -- dies</langsyntaxhighlight>
While all classes are technically global in the sense that builtins\structs.e knows all about them, the
implicit associated user defined type is by default private (ie w/o "global" in front of the class def).
Line 1,775:
<code>class s = new("singleton")</code> could still be used anywhere, and that way get duplicates.
One obvious alternative (of no special merit imo) might be to replace that global singleton s with:
<langsyntaxhighlight Phixlang="phix">global function get_singleton()
if chk==NULL then
chk = new("singleton")
end if
return chk
end function</langsyntaxhighlight>
Technically, builtins/struct.e looks like it could easily be modified to support something very similar
to the Python Borg pattern, by appropriately sharing cdx/tid in new(). However it would be even better
Line 1,788:
 
=={{header|PHP}}==
<langsyntaxhighlight PHPlang="php">class Singleton {
protected static $instance = null;
public $test_var;
Line 1,808:
echo $bar->test_var; //Prints 'One'
 
$fail = new Singleton(); //Fatal error</langsyntaxhighlight>
 
=={{header|PicoLisp}}==
As there is no physical difference between classes and objects, we can use the
class symbol itself.
<langsyntaxhighlight PicoLisplang="picolisp">(class +Singleton)
 
(dm message1> ()
Line 1,819:
 
(dm message2> ()
(prinl "This is method 2 on " This) )</langsyntaxhighlight>
{{out}}
<pre>: (message1> '+Singleton)
Line 1,832:
===Native version===
Thread safe version.
<langsyntaxhighlight PureBasiclang="purebasic">Global SingletonSemaphore=CreateSemaphore(1)
 
Interface OO_Interface ; Interface for any value of this type
Line 1,879:
Data.i @OO_Set()
Data.i @OO_Destroy()
EndDataSection</langsyntaxhighlight>
===Simple OOP extension===
Using the open-source precompiler [http://www.development-lounge.de/viewtopic.php?t=5915 SimpleOOP].
<langsyntaxhighlight PureBasiclang="purebasic">Singleton Class Demo
BeginPrivate
Name$
Line 1,904:
EndMethod
EndClass</langsyntaxhighlight>
 
=={{header|Python}}==
Line 1,911:
 
Every instance of the Borg class will share the same state:
<langsyntaxhighlight lang="python">>>> class Borg(object):
__state = {}
def __init__(self):
Line 1,929:
>>> b1.datum is b2.datum
True
>>> # For any datum!</langsyntaxhighlight>
 
===per MetaClass/AbstractBaseClass===
Line 1,935:
An approximation of the singleton can be made using only class attributes to store data instead of the instance attributes, providing at least one abstract instance method (class can not be instantiated then) and making the rest of the methods being class methods. E.g.
 
<langsyntaxhighlight lang="python">
import abc
 
Line 1,965:
Singleton.printSelf()
print Singleton.state
</syntaxhighlight>
</lang>
When executed this code should print out the following:<br>
<br>
Line 1,981:
 
 
<langsyntaxhighlight lang="python">
class Singleton(type):
_instances = {}
Line 1,991:
class Logger(object):
__metaclass__ = Singleton
</syntaxhighlight>
</lang>
 
or in Python3
 
 
<langsyntaxhighlight lang="python">
class Logger(metaclass=Singleton):
pass
</syntaxhighlight>
</lang>
 
=={{header|Racket}}==
 
Singletons are not very useful in Racket, because functions that use module state are more straightforward. However, classes are first class values, and therefore they follow the same rules as all other bindings. For example, a class can be made and instantiated but not provided to client files:
<langsyntaxhighlight lang="racket">
#lang racket
(provide instance)
Line 2,011:
(super-new)))
(define instance (new singleton%))
</syntaxhighlight>
</lang>
 
Or better, not name the class at all:
<langsyntaxhighlight lang="racket">
#lang racket
(provide instance)
Line 2,021:
(define/public (foo) 123)
(super-new))))
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
<syntaxhighlight lang="raku" perl6line>class Singleton {
# We create a lexical variable in the class block that holds our single instance.
my Singleton $instance = Singleton.bless; # You can add initialization arguments here.
method new {!!!} # Singleton.new dies.
method instance { $instance; }
}</langsyntaxhighlight>
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">require 'singleton'
class MySingleton
include Singleton
Line 2,041:
a = MySingleton.instance # instance is only created the first time it is requested
b = MySingleton.instance
puts a.equal?(b) # outputs "true"</langsyntaxhighlight>
 
=={{header|Scala}}==
The '''object''' construct in Scala is a singleton.
<langsyntaxhighlight lang="scala">object Singleton {
// any code here gets executed as if in a constructor
}</langsyntaxhighlight>
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">class Singleton(name) {
static instance;
 
Line 2,070:
 
s2.name = 'bar'; # change name in s2
say s1.name; #=> 'bar'</langsyntaxhighlight>
 
=={{header|Slate}}==
Clones of Oddball themselves may not be cloned.
Methods and slots may still be defined on them:
<langsyntaxhighlight lang="slate">define: #Singleton &builder: [Oddball clone]</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
<langsyntaxhighlight lang="smalltalk">
SomeClass class>>sharedInstance
 
SharedInstance ifNil: [SharedInstance := self basicNew initialize].
^ SharedInstance
</syntaxhighlight>
</lang>
 
=={{header|Swift}}==
<langsyntaxhighlight lang="swift">
 
class SingletonClass {
Line 2,099:
// Usage
let sharedObject = SingletonClass.sharedInstance
</syntaxhighlight>
</lang>
 
=={{header|Tcl}}==
Line 2,105:
 
ref http://wiki.tcl.tk/21595
<langsyntaxhighlight lang="tcl">package require TclOO
 
# This is a metaclass, a class that defines the behavior of other classes
Line 2,125:
return [incr count]
}
}</langsyntaxhighlight>
Demonstrating in an interactive shell:
<langsyntaxhighlight lang="tcl">% set a [example new]
::oo::Obj20
% set b [example new] ;# note how this returns the same object name
Line 2,140:
3
% $b counter
4</langsyntaxhighlight>
 
=={{header|Tern}}==
Tern has built-in support for singletons via module declarations.
<langsyntaxhighlight lang="tern">module Singleton {
speak() {
println("I am a singleton");
Line 2,150:
}
 
Singleton.speak();</langsyntaxhighlight>
 
{{out}}
Line 2,158:
 
=={{header|Vala}}==
<langsyntaxhighlight Valalang="vala">public class Singleton : Object {
static Singleton? instance;
 
Line 2,181:
print("Equal.\n");
}
}</langsyntaxhighlight>
 
=={{header|Wren}}==
Line 2,187:
 
In practice, it's unlikely anyone would bother; they'd just create a class with static methods and/or fields only which is effectively a singleton as there's only ever a single instance of a static field.
<langsyntaxhighlight lang="ecmascript">class Singleton {
// Returns the singleton. If it hasn't been created, creates it first.
static instance { __instance == null ? __instance = Singleton.new_() : __instance }
Line 2,202:
var s2 = Singleton.instance
System.print("s1 and s2 are same object = %(Object.same(s1, s2))")
s1.speak() // call instance method</langsyntaxhighlight>
 
{{out}}
Line 2,213:
A class declared static only has one instance, ever.
However, a class with the same name & structure could be created in another scope.
<langsyntaxhighlight lang="zkl">class [static] Borg{ var v }
b1 := Borg; b2 := Borg();
b1 == b2 //--> True
b1.v=123; b2.v.println(); //--> 123</langsyntaxhighlight>
{{omit from|6502 Assembly}}
{{omit from|68000 Assembly}}
10,327

edits