Beruflich Dokumente
Kultur Dokumente
Delphi
Esta implementacin ha sido sacada de [1] y est basada en la sobreescritura de los mtodos
NewInstance y FreeInstance que se hereda de la clase TObject, la madre de todos los objetos
en Embarcader Delphi.
type
TSingleton = class
public
end;
var
Ref_Count : Integer = 0;
procedure TSingleton.FreeInstance;
begin
Dec( Ref_Count );
if ( Ref_Count = 0 ) then
begin
Instance := nil;
inherited FreeInstance;
end;
end;
class function TSingleton.NewInstance: TObject;
begin
begin
// TSingleton(Result).Variable := Value;
end;
Result := Instance
Inc( Ref_Count );
end;
begin
Result := Ref_Count;
end;
Java
private Singleton() {}
return INSTANCE;
}
}
Un ejemplo correcto de inicializacin diferida. Se deja para comentar un error comn en Java
al no tener en cuenta la sincronizacin de mtodos.
private Singleton() {}
if (INSTANCE == null) {
createInstance();
return INSTANCE;
if (INSTANCE == null) {
synchronized(Singleton.class) {
if (INSTANCE == null) {
Para asegurar que se cumpla el requerimiento de "nica instancia" del singleton; la clase
debera producir un objeto no clonable:
//El mtodo "clone" es sobreescrito por el siguiente que arroja una excepcin:
Otra cuestin a tener en cuenta es que los mtodos (o la clase) deberan ser declarados como:
final para que no puedan ser sobreescritos.
C#
// Variable esttica para la instancia, se necesita utilizar una funcin lambda ya que el
constructor es privado
private Singleton()
get
return instance.Value;
// Clase de prueba
Singleton s1 = Singleton.Instance;
Singleton s2 = Singleton.Instance;
if(s1==s2)
// Misma instancia
C++
Una solucin posible en C++ (conocida como el singleton de Meyers) en la cual el singleton es
un objeto local esttico (notar que esta solucin no es segura en programas multi-hilo):
class Singleton
public:
return laInstanciaSingleton;
};
class Singleton : public Singleton<Singleton>
};
Perl
[Singleton.pm]
package Singleton;
my $singleton;
sub new {
my $class = shift;
...
[foo.pl]
require Singleton;
my $object1 = new Singleton;
Python
instance = None
if cls.instance is None:
return cls.instance
#Usage
mySingleton1 = Singleton()
mySingleton2 = Singleton()
class Singleton(type):
def __init__(cls, name, bases, dct):
cls.__instance = None
if cls.__instance is None:
return cls.__instance
class A:
__metaclass__ = Singleton
a1 = A()
a2 = A()
assert a1 is a2
End If
Return instancia
End Function
End Class
PHP5
<?php
class Ejemplo
{
echo 'Soy el constructor';
// EL mtodo singleton
if (!isset(self::$instance)) {
$c = __CLASS__;
return self::$instance;
// Clone no permitido
?>
Action Script 3
Una implementacin del patrn singleton en Action Script 3 es la siguiente:
if(!allowInstance){
}else{
if(instance==null){
allowInstance=true;
allowInstance=false;
}else{
return instance;
Javascript
Una implementacin del patrn singleton en Javascript es la siguiente:
return {
return this;
};
}();
Autoit
#include <Misc.au3>
if _Singleton("test",1) = 0 Then
Exit
EndIf
Objective C
Una sencilla implementacin del patrn Singleton par el lenguaje Objective C es:
#import "Singleton.h"
@implementation Singleton
+(Singleton *) getInstance{
@synchronized(self){
if (!singleton) {
return singleton;
@end