Ich habe an vielen Stellen gelesen, dass Singletons Schnittstellen verwenden können. Einige, wie ich das nicht verstehen kann.Wie kann eine Singleton-Klasse eine Schnittstelle verwenden?
Antwort
Jede Klasse kann eine Schnittstelle implementieren, und ein Singleton ist nur eine "normale" Klasse, die sicherstellt, dass zu jeder Zeit nur eine Instanz existiert, abgesehen von der anderen Geschäftslogik, die sie implementiert. Dies bedeutet auch, dass ein Singleton mindestens 2 Verantwortlichkeiten hat und das ist kein gutes OO-Design, da Klassen nur 1 Verantwortung haben sollten und sicherstellen, dass sie gut in dieser Verantwortung sind, aber das ist eine andere Diskussion.
Ein Singleton hat eine Instanz - es hat nie mehr als eine Instanz. Sie verwenden wahrscheinlich ein paar statische Member zum Referenzabruf und um sicherzustellen, dass es niemals mehrere Instanzen erhält, aber die Klasse ist größtenteils dieselbe wie jede andere Klasse.
Etwas wie:
public interface MyInterface
{
}
Und
public class MySingleton implements MyInterface
{
private static MyInterface instance = new MySingleton();
private MySingleton()
{
}
public static MyInterface getInstance()
{
return instance;
}
}
Sie müssen dieser Klasse einen privaten No-Args-Konstruktor hinzufügen, um sie zu einem Singleton zu machen. –
FYI, der beste Weg in Java, ein Singleton zu implementieren, ist die Verwendung einer Single-Element-Enumeration.Es ist prägnanter als der öffentliche Feldansatz und es bietet den Serialisierungsmechanismus kostenlos und es bietet auch Sicherheit gegen Reflektionsangriffe. Diese Methode muss noch weitgehend übernommen werden, aber es könnte interessant sein zu wissen. Für weitere Informationen siehe den Artikel darüber in "Effective Java" von Joshua Bloch. – nkr1pt
@Andrew: danke, ich habe zwischen SO und dem Tagesjob gepunktet und das zufällig verpasst :-) –
Grundsätzlich ist eine Singleton-Klasse eine Klasse, die eine und einmal instanziiert werden kann nur. Das Singleton-Klassenmuster wird mithilfe einer statischen Methode implementiert, um die Instanz der Singleton-Klasse abzurufen und den Zugriff auf die Konstruktoren zu beschränken.
Wie bei der Verwendung einer Schnittstelle wäre es ähnlich wie jede andere Klasse eine Schnittstelle implementieren würde.
Und es sollte auch nicht das Klonen dieses Objekts ermöglichen.
Ich glaube, ich habe dein Problem verstanden. Sie möchten die Factory-Methode in der Schnittstelle definieren (statische Methode zu getInstance()). Da die Factory-Methode jedoch nicht in der Schnittstelle definiert werden kann, funktioniert diese Logik nicht.
Eine Option ist eine Factory-Klasse, die diese statische Methode enthält. So wird es drei Klassen erste Klasse statische Methode Sekunde zu halten, ist die Schnittstelle dritte ist die konkrete Klasse
Aber wir können nicht den konkreten Konstruktor privat machen.
Aber wenn Ihre Infrastruktur zwei Pakete eines für die öffentlichen und die anderen für private
definiert Schnittstelle in der Öffentlichkeit hat, konkrete Klasse Paketebene machen (ohne jede Zugriffsmodifikator) und Factory-Klasse und statische Methode öffentlich.
Ich hoffe, das könnte Ihnen helfen.
- 1. Sollte eine Schnittstelle eine andere Schnittstelle erben
- 2. Wie kann man eine Typoskript-Schnittstelle erweitern?
- 3. Wie kann man eine Schnittstelle parzellierbar machen?
- 4. Wie kann ich eine Schnittstelle serialisieren?
- 5. eine Klasse eine Schnittstelle Bindung
- 6. Wie eine Datenbank-Schnittstelle
- 7. Wie eine Schnittstelle wie IList
- 8. Kann ich Erweiterungsmethoden verwenden, um eine Schnittstelle zu implementieren?
- 9. Erweitern eines Singletonklasse
- 10. Wie testen Sie eine Schnittstelle?
- 11. beste Weg, um eine C++ Schnittstelle verwenden
- 12. Extend abstrakte Singletonklasse
- 13. hashCode Implementierung für Singletonklasse
- 14. Kann eine Rake-Task über eine Rails-Schnittstelle ausgelöst werden?
- 15. Wie man eine Schnittstelle freigibt?
- 16. Ziel-C. Können Sie Protokoll wie eine Java-Schnittstelle verwenden?
- 17. Soll ich eine Schnittstelle oder Factory (und Schnittstelle) für eine plattformübergreifende Implementierung verwenden?
- 18. Was ist eine Schnittstelle?
- 19. Methode zurückgeben eine Schnittstelle
- 20. Kann eine Objective-c-Schnittstelle mehr als eine Implementierung haben?
- 21. Kann eine Schnittstelle teilweise Methoden implementiert haben?
- 22. Wie schreibe ich eine generische ISort-Schnittstelle?
- 23. Kann eine anonyme C# -Klasse eine Schnittstelle implementieren?
- 24. Shared_ptr Rückkehr eine Schnittstelle
- 25. Klasse Design: Klasse implementieren eine Schnittstelle implementieren eine andere Schnittstelle
- 26. vb.net-Schnittstelle und eine Klassen
- 27. Wie bindet JMX eine bestimmte Schnittstelle?
- 28. Warum sollte eine Schnittstelle eine andere Schnittstelle implementieren?
- 29. eine generische Schnittstelle
- 30. Rückkehr eine Schnittstelle Java
Warum ein Singleton ist nicht gut OO-Design? In der Tat ist einer der häufigsten OO-Entwurfsmuster –
@ChristianVielma: (Ja, spät) Das Problem ist, es erstellt * globalen Zustand *, genau wie * globale Variablen *, und leidet unter ähnlichen Problemen. Zum Beispiel ist es schwierig, Klassen zu testen, die intern Singles ohne Fremdwissen anfordern. Ihre Produktions-DB ist voll mit Müll/Testdaten? Überprüfen Sie auf Singletons. Jagd auf einen Käfer? Wenn Sie Singletons und damit einen globalen Zustand haben, können Sie sich nicht auf einen begrenzten Bereich konzentrieren. Sie müssen die Code-Basis berücksichtigen. Danke einem Singleton. Beachten Sie, dass es sich hierbei um das Singleton * -Muster * und nicht um Singleton * -Objekte * handelt. Gemeinsame Nutzung bedeutet nicht, dass es "gut" sein muss. – ray