2016-08-08 49 views
1

Ich arbeite an einem persönlichen Projekt und ich bin auf ein Problem gestoßen.Statische abstrakte Objekte mit virtuellen Methoden

Ich habe Objekt ein paar Objekte, die die gleichen Eigenschaften, Methoden, etc. haben. Die einzigen Dinge, die sich unterscheiden, sind ihre Namen, Werte von Eigenschaften und die Implementierung der Methoden. Sie benötigen auch eine gemeinsame Standardimplementierung von Methoden. Eine Schnittstelle kommt also nicht in Frage.

Also habe ich eine Basisklasse mit den Eigenschaften und "Standard" -Methoden erstellt. Aber diese Basisklasse muss abstrakt sein. Die Methoden sind virtuell, sodass sie überschrieben werden können.

Der Grund, warum ich sie statisch brauche, ist, dass Objekte Eigenschaften anderer Objekte sind.

So sind zum Beispiel die oben genannten Objekte (der Einfachheit halber) objX, objY, objZ. Sie sind von ihrer Basis abgeleitet, objW.

objContainer ist ein Objekt ohne Bezug, aber es hat eine Eigenschaft vom Typ objW, die eine Instanz von objX, objY, objZ ist.

objX, objY und objZ werden nie ändern. Ihre Eigenschaften werden alle nur gelesen. Daher haben mehrere Objekte der Instanz objContainer objX, objY oder objZ.

public class objContainer1 
{ 
    objW processor = new objY; 
} 
public class objContainer2 
{ 
    objW processor = new objY; 
} 

Wie gehe ich dabei vor? Ich wollte sie statisch halten, damit ich nicht mehrere Instanzen der gleichen Objekte habe, wenn sie alle exakt gleich sind.

Verwende ich ein Singleton? Fabrikmuster?

Ich bin verloren in welche Richtung zu gehen (wenn überhaupt). Vielleicht überschätze ich es und es gibt eine sehr einfache Lösung/

Antwort

6

Sie möchten statische Klassen sparsam verwenden. Es gibt offensichtliche Nachteile für statische Klassen, z. B. die Unfähigkeit, die polymorphe Natur der Klassenvererbung auszunutzen, da Sie nicht von einer statischen Klasse erben können. Der einzige Zeitpunkt, an dem Sie eine statische Klasse wirklich verwenden möchten, ist, wenn Sie so etwas wie eine Reihe verwandter Werkzeuge haben, die Sie in Ihrer Anwendung verfügbar machen möchten und für die Sie keinen Status beibehalten müssen. Denken Sie an die System.Math Klasse, zum Beispiel: eine Reihe von mathematischen Funktionen, die Sie überall in Ihrer Anwendung verwenden können. Eine Instanz dieser Klasse zu haben macht keinen Sinn und wäre eher umständlich und unnötig.

Ich würde vorschlagen, zu nicht statischen Klassen beizubehalten und Instanzen dieser Klassen zu erstellen. Wenn Sie nur eine Instanz Ihrer Klasse haben sollten, sollten Sie einen Singleton verwenden, wie Sie es vorgeschlagen haben.

+0

Danke. Zusatzfrage. Wenn von allen Objekten Singletons mit gemeinsamem Code sein werden, gibt es eine Möglichkeit für sie, alle Singleton-Muster von dem Elternteil zu erben, während sie selbst immer noch einzelne Singletons selbst sind? Ich möchte im Grunde, dass die abgeleiteten Klassen das Singleton-Muster implementiert haben, ohne es für jede Klasse wiederholen zu müssen. – ilyketurdles