Wie die Interview-Frage zu beantworten: Was ist ein Singleton und wie würden Sie verwenden? [geschlossen]

StackOverflow https://stackoverflow.com/questions/815528

Frage

Ich habe die Fragen auf S. O. lesen Singleton in Bezug auf und nur eine Stunde lang Google Tech Talk beobachtet. Soweit ich das beurteilen kann, scheint der Konsens in der OO Welt zu sein, dass Singletons eher ein anti-Muster sind eher als ein nützliches Design-Muster.

Das heißt, ich bin in diesen Tagen zu interviewen und die Frage viel kommt - was ein Singleton ist, und wie würden Sie es verwenden,

Was ist der beste Weg, um diese Frage zu beantworten? Soll ich einfach das Entwurfsmuster beschreiben und sagen dann die einzig akzeptable Verwendung Ich habe gehört, für die Protokollierung von ist, und dass es oft falsch verwendet für den globalen Zustand?

War es hilfreich?

Lösung

Tricky. Es gibt viele Leute, die das Gefühl, dass Singletons sind im Wesentlichen ein anti-Muster wie Sie gesagt haben (mich eingeschlossen), aber es gibt auch viele, die glauben, dass es einfach ein OOP-akzeptabler Weg ist Globals zu tun.

Wenn der Interviewer in diesem Lager ist dann ja, ich glaube, er ist falsch, aber das ist vielleicht nicht das Beste, was während des Interviews zu sagen. ;)

So würde ich wahrscheinlich versuchen, die Fakten neutral zu sein und bleiben. Sie wissen nicht, welches Lager Ihres Gesprächspartner fällt in, so halten Sie sich an den unbestreitbaren Tatsachen. Was macht ein Singleton? Und zu demonstrieren Nutzung, halten Sie sich an den wenigen Fällen, in denen die meisten Menschen sind sich einig, dass ein Singleton eine akzeptable Antwort. Oder erklären Sie Ihre Erfahrungen (da die Menschen nicht mit, dass nicht einverstanden sind entweder).

Aber, ob Sie „für“ oder „gegen“ Singletons, ist ein Interview wahrscheinlich nicht der richtige Zeitpunkt für diese Sache Kreuzzug. ;)

Andere Tipps

Gehen Sie mit Ihrer eigenen Erfahrung mit der Nutzung / nicht verwenden. Das ist die beste Antwort an jedem Tag. Wenn Sie es nicht benutzt haben, aber nicht wissen, was es ist, gehen Sie voran und sagen so. Die meiste Zeit, es ist der Interviewer, die nicht über Singletons wagen würde -. So einen Riss an sie nehmen

Solange youy für eine Diskussion vorbereitet sind, denke ich, Ihre vorgeschlagene Antwort gut ist. Aber beachten Sie, dass einige von uns noch Singletons finden eine nützliche Idee zu sein. Einige Daten sind natürlich ein global agierendes Unternehmen und Singletons bieten ein vernünftiges Mittel, um diese Daten zu abstrahieren. Sie können natürlich auch verwenden Singletons bei mehr limiited Bereiche, zum Beispiel in einem bestimmten Namespace, wenn Sie die Sprache (n) ein solches Konstrukt unterstützen.

A Singleton.

Per Definition ist es eine Aufgabe, die nur eine Instanz in der gesamten Anwendung hat. Dies kann durch den Konstruktor privat und bietet eine statische Instanz über eine öffentliche Eigenschaft in der Objektdefinition garantiert werden.

Es ist ein nützliches Muster für, wenn Sie eine Ressource Umgang mit dem nur ein Objekt, um es jederzeit zugreifen kann.

Allerdings hat es viele Kompromisse. Die Singleton-Instanz viele haben ihre eigenen Anforderungen machen jede Klasse zu testen, die es verwendet belastend, weil sie seine Voraussetzungen als auch erfüllen müssen wie die Voraussetzungen der Klasse getestet.

Darüber hinaus kann es ein Problem sein, wenn ein Projekt zu erhalten und versucht, einige der Abstraktion zu ändern. Deshalb finde ich es am besten, abstrakte Singleton über eine Schnittstelle. Halten Sie die „Single Instance“ als Implementierungsdetail und übergeben Sie die Singleton-Instanz als Schnittstelle um was bedeutet, dass Code Aufruf nicht auf die Klassendefinition gebunden ist (und statische Eigenschaft). Dies erleichtert es, zu testen und zu abstrakt zu einem späteren Zeitpunkt auf Kosten der architektonischen Sanitär (zum Beispiel um es in ctors oder Set-Eigenschaften vorbei).

Ebenso jeden daran erinnern, dass die Welt vor der GoF nicht existierte, werde ich, dass man hinzufügen kann auch Änderungen der Singleton-Muster verwenden, um nur eine Instanz pro Session zu gewährleisten, oder pro Thread oder per was auch immer. Verwenden Sie einfach per-Session oder pro-Thread oder pro-unabhängig Zustand des Ein-pro Instanz zu halten.

Meine Antwort:

  

Ach komm, konnte nicht Sie atleast finden die    zweite beliebtestene Frage zu   dieses müde alte Thema? Sie haben für die erste gehen? Ich gehe weg.   Das Interview ist vorbei.

oder so wünschte, ich könnte es sein ...

Meine Antwort wäre:

  

Ein Singleton ist ein Design-Muster, das   eine Methode gibt zu gewährleisten, dass   nur 1 Instanz eines Objekts existiert an   Laufzeit.

     

Ich würde es mit Vorsicht verwendet werden.

Was ist Singletons, die keinen Staat haben? Ich bin speziell, was Dinge wie einige mögliche Idempotent Konkrete Strategien in der Strategie-Muster, reinen Algorithmus, keine Daten.

oder Java Enum-Klassen, die sind Singletons. Ich finde so etwas wie dies nützlich:

public enum StringComparator implements Comparator {

  CASE_SENSITIVE {
    int compare(Object lhs, Object rhs) {
      // check for null omitted for brevity
      return lhs.equals(rhs);
    }
  },

  CASE_INSENSITIVE {
    int compare(Object lhs, Object rhs) {
      return String.CASE_INSENSITIVE_ORDER( lhs, rhs ) ;
    }
  };

  boolean equals( Object o ) {
   return this == o ;
  }
} 

Es gibt ein paar Anwendungen ich in ausgeführt haben. Die Protokollierung ist offensichtlich. Ein weiterer Grund ist die Konsolenausgabe mit NCurses. Ich habe eine Bibliothek, die Panel-Objekte verwendet, aber jeder benötigt, um mit einem einzigen Controller zu kommunizieren, die Dinge wie z-Aufträge und so gesteuert. Eine andere ist ein Zufallszahlengenerator für ein Spiel. Wollen Sie wirklich, dass Mersenne-Twister-in jeder Funktion reseed, oder es überall herum passieren?

Aber für die meisten Teile, die sie verursachen schlechtes Design.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top