Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-04-2009, 14:38   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 15
Singleton mit Bibliothekssymbol verknüpfen

Hi,
ich frage mich ob es möglich ist eine Singleton Klasse mit einem Bibliothekssymbol zu verknüpfen oder ob es einen besseren Weg gibt für meinen Anwendungsfall.

Ich habe eine App mit einem MovieClip in dem verschiedenartige Informationen ausgegeben werden, ähnlich einem Debugging Fenster. Dieses Fenster möchte ich von unterschiedlichen Orten her aufrufen.

Angenommen mal dieses Ausgabefenster heißt InfoPanel, dann möchte ich aus einem beliebigen Ort in meiner App sagen können

panel.log("something");

Anstatt "panel" jetzt zwischen allen Objekten hin- und herzureichen was ich sehr umständlich finde, dachte ich mir das als Singleton anzulegen:

panel = InfoPanel.getInstance();
panel.log("something");

Daher meine Idee, InfoPanel als Singleton anzulegen und mit einem Bibliothekssymbol zu verknüpfen. Geht das überhaupt, und wenn ja, wie muss das Singleton aussehen?

Oder gibt es noch einen besseren Weg?
kessler.mark ist offline   Mit Zitat antworten
Alt 25-04-2009, 14:59   #2 (permalink)
debug("Gollum")
 
Benutzerbild von schinki_
 
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 441
Versuchs mal lieber damit.
Arthropod

lg
__________________
______________________________________
schinki_ ist offline   Mit Zitat antworten
Alt 25-04-2009, 15:00   #3 (permalink)
debug("Gollum")
 
Benutzerbild von schinki_
 
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 441
Achso....was mir noch einfällt.
In AS3, wenn es denn so sein sollte, hat man jetzt wunderschöne setter und getter.
Das heisst ein Singleton kann nun so aussehen
Code:
  1. Klasse.Instance.tuwas()
Instance kann in diesem fall ein getter sein.
lg
__________________
______________________________________
schinki_ ist offline   Mit Zitat antworten
Alt 25-04-2009, 15:45   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Ja, das geht. Du musst nur das Bibleothekssymbol kapselt und dort instanziieren.
Omega Psi ist offline   Mit Zitat antworten
Alt 25-04-2009, 17:02   #5 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 15
Ja, Danke. Allerdings ear das mit dem Debugger nur ein Beispiel, es ging mir um den generellen Fall. Aber es gibt ja unterschiedliche Arten wie so ein Singleton realisiert werden kann. Ich habe jetzt eins gefunden das funktioniert wie ich mir das Vorstelle.

Es gibt nur ein Problem - wenn ich aus einer anderen Klasse heraus im Konstruktor eine Instanz hole, mit Singleton.getInstance() oder auch Singleton.instance (wobei ich instance klein schreiben würde weil Namen in CamelCase ja aus Konvention für Klassennamen reserviert sind), dann kann es vorkommen dass dieses getInstance() ausgeführt wird bevor das Singleton auf der Bühne instantiiert wurde. Was zu einem Fehler führt wenn das Singleton auf der Bühne instantiiert wird denn das geschieht ja über new Singleton().

Aber ist nicht schlimm, ich muss einfach drauf achten dass alle getInstance() Aufrufe erst passieren wenn das Symbol auf der Bühne instantiiert wird.
kessler.mark ist offline   Mit Zitat antworten
Alt 25-04-2009, 17:08   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Nein, das ist falsch. Das Objekt muss im Singleton erzeugt werden, sonst ist es kein Singleton.

Am besten machst du das so, dass du über eine Factory eine Instanz einer internal deklarierten Klasse zu Verfügung stellst. So kannst du sicherstellen, dass du
  • nur eine Instanz erzeugst
  • mit dem public Konstruktor kein Mist gebaut wird.
Omega Psi ist offline   Mit Zitat antworten
Alt 25-04-2009, 17:41   #7 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 15
Stimmt. Was ich da habe ist eine etwas eigenwillige Implemenation eine Singletons - und in wirklichkeit gar kein echtes Singleton. Es ist eine Klasse die ein einziges mal über "new" instantiiert werden kann, und sich danach wie ein Singleton verhält. Dadurch kann es aber eben auch mit einem Bibliothekssymbol verknüpft und instantiiert werden.
kessler.mark ist offline   Mit Zitat antworten
Alt 26-04-2009, 14:17   #8 (permalink)
debug("Gollum")
 
Benutzerbild von schinki_
 
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 441
Zitat:
Zitat von kessler.mark Beitrag anzeigen
Singleton.instance (wobei ich instance klein schreiben würde weil Namen in CamelCase ja aus Konvention für Klassennamen reserviert sind)
Also wir schreiben public statics UpperCase!

PublicStatic
__privateMethode
publicMethode
getter
setter
_privateVar
publicVar
PUBLIC_CONST_VAR


lg schinki
__________________
______________________________________
schinki_ ist offline   Mit Zitat antworten
Alt 26-04-2009, 14:45   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Zitat:
Zitat von kessler.mark Beitrag anzeigen
Stimmt. Was ich da habe ist eine etwas eigenwillige Implemenation eine Singletons - und in wirklichkeit gar kein echtes Singleton. Es ist eine Klasse die ein einziges mal über "new" instantiiert werden kann, und sich danach wie ein Singleton verhält. Dadurch kann es aber eben auch mit einem Bibliothekssymbol verknüpft und instantiiert werden.
Du instalziierst das Bibleotheksymbol nur einmal im Singleton. Das ist der Trick.
Omega Psi ist offline   Mit Zitat antworten
Alt 27-04-2009, 09:36   #10 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 15
Ist natürlich gut so eine Konvention zu haben, aber speziell bei den public static besteht dann ja die Gefahr sie mit Klassennamen zu verwechseln.

Zitat:
Zitat von schinki_ Beitrag anzeigen
Also wir schreiben public statics UpperCase!

PublicStatic
__privateMethode
publicMethode
getter
setter
_privateVar
publicVar
PUBLIC_CONST_VAR


lg schinki
kessler.mark ist offline   Mit Zitat antworten
Alt 27-04-2009, 09:40   #11 (permalink)
debug("Gollum")
 
Benutzerbild von schinki_
 
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 441
Zitat:
Zitat von kessler.mark Beitrag anzeigen
Ist natürlich gut so eine Konvention zu haben, aber speziell bei den public static besteht dann ja die Gefahr sie mit Klassennamen zu verwechseln.
Äh....und wie soll das mit einer richtigen IDE zu verwechseln sein???
Vor einer Static MUSS ja immer eine Klasse angegeben werden!
Und Klasse in Klasse gibt es nicht! Zumindest ist das mir in Flash nicht bekannt!
__________________
______________________________________
schinki_ ist offline   Mit Zitat antworten
Alt 27-04-2009, 09:43   #12 (permalink)
Neuer User
 
Registriert seit: Feb 2009
Beiträge: 15
Stimmt, da hab ich falsch gedacht. Sorry
kessler.mark ist offline   Mit Zitat antworten
Alt 29-04-2009, 20:16   #13 (permalink)
thinkin aBout tha lib.
 
Benutzerbild von kaneda
 
Registriert seit: Nov 2001
Ort: Kölle
Beiträge: 1.379
Hmm

http://www.bigroom.co.uk/blog/better-without-singletons

Ich bin schon länger der Meinung das Singletons(wie dieser nette Blog Eintrag auch meint) nicht wirklich die Lösung sind. Habe schon öfter die Erfahrung gemacht das man auch wenn man jetzt meint: So: den code mache ich jetzt statisch nach längerer Zeit drauf kommt: Ups da brauch ich mehr dynamik drin. Und dann fängt das umschreiben an. Und man hofft es geht und am abend geht man erschöpft nach Hause. IOC wäre mein Ansatz aber zu deinem Thema aber was Bibliothekensymbol angeht: wenn man das verlinkt ist es ganz normal als Klasse verfügbar: man kann also auch so verrückt sein und wenn man schon den Singleton missbraucht dann das auch ordentlich machen:

Code:
import com.mypage.MyLibraryItem;
class MyClass
{
    public static const INSTANCE: MyClass = new MyClass( new MyLibraryItem() );
}
weil so sind weniger Zeilen code drin die man später mal löscht, und wenn es keine Probleme macht dann ist es sogar flotter =)
__________________
Back to community with http://leichtgewicht.at
kaneda ist offline   Mit Zitat antworten
Alt 30-04-2009, 09:36   #14 (permalink)
debug("Gollum")
 
Benutzerbild von schinki_
 
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 441
Zitat:
Zitat von kaneda Beitrag anzeigen
Ich bin schon länger der Meinung das Singletons(wie dieser nette Blog Eintrag auch meint) nicht wirklich die Lösung sind.
Najaa........wenn man seinen Code richtig organisiert, kann man so ziemlich alles machen.
Wir verwenden Singeltons und die machen immer Sinn!!!
Sie sind ein fester Bestandteil unseres Frameworks!

lg Schinki
__________________
______________________________________
schinki_ ist offline   Mit Zitat antworten
Alt 30-04-2009, 09:58   #15 (permalink)
thinkin aBout tha lib.
 
Benutzerbild von kaneda
 
Registriert seit: Nov 2001
Ort: Kölle
Beiträge: 1.379
Hmm

Also ich weiss schon das man so ziehmlich alles machen kann aber jetzt mal in Flashersprache: Singletons sind das neue global.

Was hat man früher nicht alles in global reingehauen das chaos erzeugt hat? Flashprojekte werden selten alt genug damit das eine Rolle spielt . Aus dem Aspekt heraus Singletons verwenden ist ja auch okay - aber wenns eben schon keine Rolle spielt obs schön aussieht oder lange hält dann kann man sich die Methode gleich auch sparen und speichert einfach eine Konstante irgendwo -> Weniger code; Selber Effekt.
__________________
Back to community with http://leichtgewicht.at
kaneda ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
singleton

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele