WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Probleme mit vererbten Singleton - Konstruktor???, Access???

 

joekey
Forum-Century

Forum-Century


Beiträge: 169
Anmeldedatum: 03.04.08
Wohnort: Wien
Version: 2011b
     Beitrag Verfasst am: 26.07.2009, 12:04     Titel: Probleme mit vererbten Singleton - Konstruktor???, Access???
  Antworten mit Zitat      
Hallo,

ich habe folgende Situation:

Ich habe eine Reihe an Klassen (siehe code: cClass1.m, cClass2.m ...) die ich als Singleton implementieren will.
Da der code für Singleton immer gleich ist, und es ändert sich schließlich nur der aufrufende Konstruktor, macht es
meiner Meinung nach Sinn, diesen Code in eine separate Klasse auszulagern (siehe code: cSingleton.m) und anschließend
von den einzelnen Subklassen erben lassen.

Code cClass1
Code:

classdef cClass1 < cSingleton
    %CCLASS1 Summary of this class goes here
    %   Detailed explanation goes here
   
    properties
    end
   
    methods (Access=public)      %DIESE PERMISSION SOLLTE EIGENTLICH AUF PRIVATE GESETZT WERDEN!
        function obj = cClass2()
           
        end
    end
end
 


Code cSingleton
Code:

classdef cSingleton < handle
    %CSINGLETON Summary of this class goes here
    %   Detailed explanation goes here
   
    properties
    end
   
    methods (Static)
        function inst = get()
            persistent myobj;
            if isempty(myobj),
                myobj = cClass2(); %DIESER KONSTRUKTOR SOLL SICH JE NACH AUFRUFENDEN KLASSE ÄNDERN!
                inst = myobj;
            else
                inst = myobj;
            end
        end
    end
end
 


Meine Fragen:

Wie könnte ich es Anstellen dass ich in der statischen Methode "get" die aufrufende Klasse kenne? Damit ich
den Konstruktor korrekt setzten kann. Das Problem ist eben die statische Methode die die aufrufende Klasse nicht kennt
und sie ist zudem notwendig für den Singleton Pattern.

Damit im Zusammenhang steht auch das zweite Problem: wenn ich in der Klasse cClass1 den zugriff auf Konstruktor auf
PRIVATE setze (laut Singleton Pattern) kann darauf die statische Methode nicht zugreifen.

Ist die Architektur nicht ganz korrekt? oder sollte ich die Singleton in jeder cClass separat implementieren? Somit
hätte sich der code aber wiederhollt!

Danke für die Hinweise und anregungen

LG joe
Private Nachricht senden Benutzer-Profile anzeigen


Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 27.08.2009, 14:40     Titel:
  Antworten mit Zitat      
Hallo,

das kann so nicht funktionieren: die persistente Variable myobj gibt es nur einmal (nicht einmal pro Klasse!). So ein Problem generell anzupacken: man fügt eine abstrakte Methode createObj hinzu, die dann von jeder abgeleiteten Klasse implementiert werden müsste.
Normalerweise rate ich ja ab, Code einfach zu kopieren, auf der anderen Seite, hier würde ich es empfehlen, vorausgesetzt, es gibt nicht hunderte von Singletons (und wenn ja, stellt sich sowieso die Frage, ob das wirklich Sinn macht ...)

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
joekey
Themenstarter

Forum-Century

Forum-Century


Beiträge: 169
Anmeldedatum: 03.04.08
Wohnort: Wien
Version: 2011b
     Beitrag Verfasst am: 28.08.2009, 13:06     Titel:
  Antworten mit Zitat      
Hallo Titus,

danke für deine Antwort. Ich habe es mit dem Kopieren des codes gelösst.

LG joe
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.