# Singleton vs static



## p-flash (9. Nov 2005)

Hi,

Sinn des Singletonmusters ist es ja nur ein Objekt der Klasse zu erstellen. Warum benutzt man nicht direkt  nur Klassenattribute und methoden?

Bin dankbar für jede Info.

p-flash


----------



## bygones (9. Nov 2005)

1. bitte mach ein paar weniger --- in deiner sig  verzieht a weng den Bildschirm

2. der Grund ist eine gewisse Flexibilität zu behalten. Ein singleton ist ja im Grunde eine ganz normale Klasse. KOmmt es später zu der Entscheidung doch kein Singleton zu behalten, ändert man nur den Zugriff auf das Objekt, die Klassenorganisation kann beibehalten werden (somit sind weniger Änderungen in der Klasse selbst, als auch in den abhängigen Klassen zu tun)

edit: zu beachten ist bei einer rein statischen Klasse, dass diese dann aber final ist, sonst können Unterklassen generiert werden die das ganze ad absurdum führen


----------



## p-flash (9. Nov 2005)

Schon erledigt.

Danke, macht auf jeden Fall Sinn.

p-flash


----------



## AlArenal (9. Nov 2005)

deathbyaclown hat gesagt.:
			
		

> 2. der Grund ist eine gewisse Flexibilität zu behalten. Ein singleton ist ja im Grunde eine ganz normale Klasse. KOmmt es später zu der Entscheidung doch kein Singleton zu behalten, ändert man nur den Zugriff auf das Objekt, die Klassenorganisation kann beibehalten werden (somit sind weniger Änderungen in der Klasse selbst, als auch in den abhängigen Klassen zu tun)



Natürlich nur, wenn ich nicht für jeden Aufruf einer Methode des Singleton ein SingletonKlasse.getInstance().irgendeineMethode() mache, sondern nach Möglichkeit zentral in einer verwendeten Klasse einmal ne Referenz auf die Instanz hole und die durchweg verwende.


----------



## bygones (9. Nov 2005)

AlArenal hat gesagt.:
			
		

> Natürlich nur, wenn ich nicht für jeden Aufruf einer Methode des Singleton ein SingletonKlasse.getInstance().irgendeineMethode() mache, sondern nach Möglichkeit zentral in einer verwendeten Klasse einmal ne Referenz auf die Instanz hole und die durchweg verwende.


jup.

warum ich es auch verwende ist die Eindeutigkeit des Sinns der Klasse. Es ist somit sofort ersichtlich, dass es sich hierbe um ein Singleton handelt. Bei einer rein statischen Klasse ist dies nicht sofort ersichtlich.


----------



## Mag1c (9. Nov 2005)

Hi,

außerdem hat man beim Singleton die Möglichkeit, als Instanz z.B. eine abgeleitete Klasse zu instanziieren, ohne daß man man von außen etwas davon mitbekommt.

Gruß
Mag1c


----------



## AlArenal (9. Nov 2005)

Mag1c hat gesagt.:
			
		

> außerdem hat man beim Singleton die Möglichkeit, als Instanz z.B. eine abgeleitete Klasse zu instanziieren, ohne daß man man von außen etwas davon mitbekommt.



Stimmt.. hab ich noch gar nicht drüber nachgedacht.. könnte sich aber mal als nützlich erweisen..


----------



## Zebani (11. Nov 2005)

Hallo,

ich habe eine Frage. Da die Frage hier passt, wollte ich keine neue Topic eröffnen.

Soweit ich weiss, braucht man auch die Methode _clone_ zu überschreiben, damit die erstellte Singleton-Klasse einen Sinn ergibt. 
Kann man die erstellten Singleton-Klassen auch in diesem Fall mit RMI benutzen? 
Man hat nur ein statisches Objekt. Wie wird denn dieses Objekt exportiert?


----------



## bygones (12. Nov 2005)

Zebani hat gesagt.:
			
		

> Soweit ich weiss, braucht man auch die Methode _clone_ zu überschreiben, damit die erstellte Singleton-Klasse einen Sinn ergibt.


das wär mir neu ? warum will ich ein Objekt klonen, von dem ich nur eine Instanz haben will ?


----------



## helium (12. Nov 2005)

Ein Singleton kann einen C'tor haben, der das Objekt initialisiert, beim Monostate Pattern ist das nicht der Fall. Ein Singleton kann von einer anderen Klasse abgeleitet sein (könnte sich z.B. auch auch beim Null-Object-Pattern als nützlich erweisen), Monostate kann das nicht, ... .
Aber zu sagen, das Singleton besser ist oder das Monostate besser ist ist totaler Quatsch. Es sind zwei Pattern, die beide ihre Berechtigung haben.


----------



## Bleiglanz (12. Nov 2005)

helium hat gesagt.:
			
		

> ... Pattern, die beide ihre Berechtigung haben.


und viel zu oft angewendet werden


Das Singleton ist (für viele) das "Erste" und einfachste Pattern, man kann es auch als Anfänger ohne Schwierigkeiten vollständig verstehen.

Gerade weil es so einfach ist, denken dann manche man müsse das einsetzen

ist aber leider völlig falsch gedacht


----------



## bygones (12. Nov 2005)

Bleiglanz hat gesagt.:
			
		

> Das Singleton ist (für viele) das "Erste" und einfachste Pattern, man kann es auch als Anfänger ohne Schwierigkeiten vollständig verstehen.
> 
> Gerade weil es so einfach ist, denken dann manche man müsse das einsetzen
> 
> ist aber leider völlig falsch gedacht


juche - es leben die globalen Variablen  :wink:


----------



## helium (12. Nov 2005)

deathbyaclown hat gesagt.:
			
		

> Bleiglanz hat gesagt.:
> 
> 
> 
> ...



Genau das ist das Problem. Singletons sind Objekte, die höchstesn einmal zur selben Zeit existieren dürfen. Das hat doch nichts mit 'ner globalen Variable zu tun. Den Typ, den die globale Variable hat kann man möglicherweise beliebig oft instanzieren. Das ist einfach 'ne Variable, die von überall aus zugänglich ist. Eine globale Variable könnte sogar auf ein Singleton verweisen.


----------



## Zebani (12. Nov 2005)

deathbyaclown hat gesagt.:
			
		

> Zebani hat gesagt.:
> 
> 
> 
> ...



Warum sollte man eine Singleton-Klasse haben, obwohl das einzige Objekt dieser Klasse geklont werden kann?


----------



## Roar (12. Nov 2005)

Zebani hat gesagt.:
			
		

> deathbyaclown hat gesagt.:
> 
> 
> 
> ...


wenn das objekt geklont werden kann macht ein singleton keinen sinn :?


----------



## helium (13. Nov 2005)

Roar hat gesagt.:
			
		

> wenn das objekt geklont werden kann macht ein singleton keinen sinn :?


Genauer: Dann ist es kein Singelton mehr.


----------



## AlArenal (13. Nov 2005)

helium hat gesagt.:
			
		

> Roar hat gesagt.:
> 
> 
> 
> ...



Ist es dann ein Multiton?


----------



## bygones (13. Nov 2005)

AlArenal hat gesagt.:
			
		

> helium hat gesagt.:
> 
> 
> 
> ...


ne Cloneiton.... 

oh man mal wieder nen Clown zum Frühstück gegessen....


----------



## AlArenal (13. Nov 2005)

deathbyaclown hat gesagt.:
			
		

> Ist es dann ein Multiton?
> ne Cloneiton....
> 
> oh man mal wieder nen Clown zum Frühstück gegessen....



Nein, dann wäre es doch ein Clowniton


----------



## Illuvatar (13. Nov 2005)

deathbyaclown hat gesagt.:
			
		

> oh man mal wieder nen Clown zum Frühstück gegessen....



Das is dann "death of a clown"


----------

