| | #1 (Permalink) |
| Neuer User Registriert seit: Jun 2004 Ort: Aachen
Beiträge: 30
| Design Pattern Singleton
Holla, In Bokels Blog Archiv habe ich das gefunden.... http://www.helpqlodhelp.com/blog/archives/2003_09.html AS7: Executing once Geht darum, wie man Instanzen erzeugen kann wenn die Klasse deklariert wird. Diese Technik kann man wunderbar mit dem Singleton Pattern verbinden. Beim Singleton Pattern gibt es nur eine Instanz - also kann man diese Instanz auch zur Deklarationszeit erzeugen. Aus Gof Intent für ein Singleton: "Ensure a class only has one instance, and provide a global point of access to it" Prima Beispiel ist eine Klasse, die Konfigurationen einer Applikation speichert. Die Klasse unten benutzt dafür einen Hashtable. http://java.sun.com/j2se/1.3/docs/ap...Hashtable.html Singleton ist super praktisch aus vielen Gründen... vorallem aber der globale Einsprungspunkt. Wers nicht kennt - unbedingt anschauen ![]() Viele Grüße, Nico. PHP-Code: |
| | |
| | #2 (Permalink) |
| Neuer User Registriert seit: Sep 2001 Ort: Neckarsulm
Beiträge: 273
|
Zum Thema Singleton in Flash hat auch Dave Yang vor nicht so langer Zeit was auf seinem Weblog geschrieben. Unterscheidet sich aber nur geringfügig von deiner Implementation. Dave Yang: Singleton In manchen Fällen ist es jedoch schöner, ein Singleton-Dasein einer Klasse über eine Factory zu Regeln. Also das die Factory entscheidet ob eine Klasse ein Singleton sein soll oder eben nicht. Natürlich könnten bei dieser Implementation auch noch andere Instanzen des 'Singletons' irgendwo rumschwirren. Ist also nicht einsetzbar wenn man ein absolutes Singleton benötigt. Was in diesem Zusammenhang auch immer schön zu benutzen ist sind 'Kontexte'. Das bedeutet man registriert eine Klasse mit einem String in einem Kontext und eine Instanz erhält man dann über den speziellen Kontext + den String. Und die ganze Registrierung (welche Klasse zu welchem String) dann noch gesteuert über ne außenstehende Text/XML-Datei or what ever. Ich guck mal ob ich sowas in der Art in ner folgenden as2lib Version mit reinpack. |
| | |
| | #3 (Permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Wenn ich es mir recht überlege braucht man Singletons ja eigentlich nur, wenn man mehrere davon haben will. Eigentlich ein Widerspruch in sich Ansonsten könnte man ja einfach eine Klasse mit statischen Methoden benutzen, oder?mfg. r
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #4 (Permalink) |
| Neuer User Registriert seit: Sep 2001 Ort: Neckarsulm
Beiträge: 273
|
Wenn man absolute Singletons nimmt dann jein, wobei ich sagen muss, dass ich mal ähnlicher Auffassung war. Ich persönlich mag es immer mit Instanzen zu arbeiten. Was bei einer Klasse mit nur statischen Methoden etc. auch wegfallen würde wäre die Initialisierung im Konstruktor. Man könnte dies natürlich auch irgendwie bei statischen Methoden hinbiegen, dass es auch so eine Art Initialisierung gibt, was aber auch nicht wirklich elegant wäre. Falls man 'Singletons' (so wie in meinem letzten Post geschrieben) durch einen Kontext bzw. eine Factory realisiert, dann stehn einem sozusagen beide Möglichkeiten offen. Also absolutes Singleton oder doch irgendwo noch ne zweite oder dritte Instanz von der 'Singleton' Klasse. In diesem Fall könnte man es nicht durch statische Methoden regeln. Wobei es in dieser kompromissreichen Singleton Implementation eine Glaubensfrage ist, ob es nun ein Singleton ist oder nicht. |
| | |
| | #5 (Permalink) |
| www.kruesch.de Registriert seit: Feb 2002
Beiträge: 1.057
|
Preferences ist ein sehr sinnvoller Einsatz für ein Singleton. Wenn man es mit einer Factory löst, kann man das Objekt erst bei Bedarf erzeugen, und dann immer wieder rausreichen, falls bereits existiert. Ich denke auch, der Punkt ist die Initialisierung - wenn die benötigt wird, sollte man sie bei der Instanzierung im Konstruktor durchführen. Statische Initialisierung á la Dave Yang geht natürlich auch, aber u.U. kann das für die Performance ungünstig sein, weil sie sofort ausgeführt wird.
__________________ www.planet-xaml.net Geändert von flory (14-06-2004 um 09:06 Uhr) |
| | |
| | #7 (Permalink) |
| Neuer User Registriert seit: Jun 2004 Ort: Aachen
Beiträge: 30
|
>Mir ist gerade noch zwei wichtige Punkte eingefallen warum man Singletons nicht durch statisch Methoden regeln sollte. ... kein "this" statement... Das mit der Factory finde ich interessant.. hast Du da Quellen ? >Wenn ich es mir recht überlege braucht man Singletons ja eigentlich nur, wenn man mehrere davon haben will. Eigentlich ein Widerspruch in sich Ansonsten könnte man ja einfach eine Klasse mit statischen Methoden benutzen, oder? Gibt ja noch das "Multiton" ... da könnte man instances als Hash oder Array/ Vector angeben. Sinnvoll z.B. wenn man in einer Multiuserumgebung eine Nachricht an alle User schicken möchte. Die Userthread-Klasse enthält dann ein Array "instances"... ...for (e = UserThread.getInstances().getEnumeration ...) [schick Nachricht]... |
| | |
| | #8 (Permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Gute Gründe und zusätzlich vermeiden wir damit einen Sonderfall, also doch lieber Instanz als statische Klasse danke r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #9 (Permalink) |
| Neuer User Registriert seit: Jun 2004 Ort: Aachen
Beiträge: 30
|
Hey MiM! Simon das bist ja Du! Denke die HashMap der AS2Lib funktioniert der o.g. Umgebung prima! Noch eine kleine Info... Ich arbeite gerade an einem Eclipse Plugin, dass die Features von SOS in Eclipse bietet. Soweit läuft alles ganz gut...aber die SWT Controls von Eclipse machen mir zu schaffen... Ich bekomme keine direkte Steuerung von dem TextViewer zum Scrollbar... leider bin ich aber ab morgen im Urlaub und kann daran nicht weiterarbeiten... naja Urlaub ich auch schön ![]() Ich würde dieses Projekt auch gerne als open-Source durchführen, habe aber die Befürchtung, dass die Organisation mehr Arbeit macht als das Projekt selbst. Stellt SourceForge einen CVS Server pro Projekt zur Verfügung ? Das würde es ja schon deutlich vereinfachen... lg, Nico. |
| | |
| | #10 (Permalink) | |
| thinkin aBout tha lib. Registriert seit: Nov 2001 Ort: Kölle
Beiträge: 1.379
| hmm Zitat:
Code: static function do() {
var that = eval("th"+"is");
}
Ich weiss nicht obs zum Thema "Singleton" passt... ich hab letzens für ein grossflächiges Refactoring rund um einen bitterbösen Bug ein bischen etwas anderes gemacht, das im Endeffekt vielleicht nicht so das schönste war aber in meinem Fall die einfachste schnellste und doch recht saubere Lösung. Das ganze auch noch in JavaScript *urgs* und zwar hab ich die selben methoden zusätzlich(was ja in einer anständigen OOP Sprache nicht exisitert) statisch angelegt wie sie vorher public verfügbar waren. Dazu hab ich eine Mehtode geschrieben die instanzen der Klasse anhand eines parameters anlegt... so irgendwie: Code: MyClass = function(win) {
this.win = win;
}
o = MyClass.prototype;
p = MyClass;
p.instances = new Array();
p.initialize = function(win) {
this.instances[this.instances.length] = new this(win);
}
p.doSomething = function() {
for(var i=0; i<this.instances.length; i++) {
this.instances[i].doSomething();
}
}
o.doSomething = function() {
//... usw.
}
Hätte ich gleich von anfang an Singletons verwendet so wäre das nicht in ganz so viel Arbeit ausgeartet beim umbauen und ich hätte einfach einen broadcaster dazwischenschalten können. nunja. just my 2 cents.
__________________ Back to community with http://leichtgewicht.at | |
| | |
| | #11 (Permalink) |
| Neuer User Registriert seit: Sep 2001 Ort: Neckarsulm
Beiträge: 273
|
@Nico Zimmermann: Quellen hab ich gerade so aus dem Stehgreif nicht. Ich bin bei der Arbeit mit J2EE draufgestoßen. Da wird das so in der Art gemacht weil statische Vars laut Spezifikation, auf die Weise wie man sie zur Umsetzung eines Singletons braucht, nicht erlaubt sind. Wenn ich daheim bin dann werd ich kurz ein paar Referenzen raussuchen und hier posten. @Kaneda: Das this gibt es schon, aber schön ist eval("th" + "is") ja nicht gerade. Geändert von MiM (14-06-2004 um 12:42 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |