Vraag Verschil tussen statische klasse en singleton-patroon?


Welk reëel (dat wil zeggen praktisch) verschil bestaat er tussen een statische klasse en een singleton-patroon?

Beide kunnen zonder instantiatie worden aangeroepen, beide bieden slechts één "instantie" en geen van beide is thread-safe. Is er een ander verschil?


1489
2018-02-06 08:13


oorsprong


antwoorden:


Wat zegt u dat een singleton- of een statische methode niet threadveilig is? Meestal beide moeten worden geïmplementeerd om thread-safe te zijn.

Het grote verschil tussen een singleton en een aantal statische methoden is dat singletons interfaces kunnen implementeren (of afgeleid van bruikbare basisklassen, hoewel dat in mijn ervaring minder gebruikelijk is), zodat je de singleton kunt doorgeven alsof het "gewoon een andere is" " implementatie.


1042
2018-02-06 08:17



Het echte antwoord is van Jon Skeet, op een ander forum hier.

Een singleton geeft toegang tot een single   gemaakt exemplaar - die instantie (of   eerder, een verwijzing naar die instantie)   kan als een parameter worden doorgegeven aan een ander   methoden en worden behandeld als een normaal   voorwerp.

Een statische klasse staat alleen statisch toe   methoden.


403
2018-02-06 08:21



  1. Singleton-objecten worden opgeslagen in Hoop, maar statische objecten worden opgeslagen stack.
  2. We kunnen kloon (als de ontwerper het niet heeft verboden) het singleton-object, maar we kunnen het statische klasseobject niet klonen .
  3. Singleton-lessen volgen de OOP (object georiënteerde principes), statische klassen niet.
  4. We kunnen een implementeren interface met een Singleton-klasse, maar met een statische methode van een klasse (of bijvoorbeeld een C # static class) kan niet.

324
2017-09-11 10:22



Het Singleton-patroon heeft verschillende voordelen ten opzichte van statische klassen. Ten eerste kan een singleton klassen uitbreiden en interfaces implementeren, terwijl een statische klasse dit niet kan (het kan klassen uitbreiden, maar het neemt niet de leden van de instantie over). Een singleton kan lui of asynchroon worden geïnitialiseerd, terwijl een statische klasse over het algemeen wordt geïnitialiseerd wanneer deze voor het eerst wordt geladen, wat leidt tot potentiële problemen met de lader. Het belangrijkste voordeel is echter dat singletons polymorf behandeld kunnen worden zonder hun gebruikers te dwingen om aan te nemen dat er maar één exemplaar is.


122
2018-02-06 08:30



static klassen zouden niets behoeftes moeten doen, het is handig om een ​​heleboel functies bij elkaar te voegen, d.w.z. Math (of Utils in projecten). Dus de klassenaam geeft ons gewoon een idee waar we de functies kunnen vinden en er is niets meer.

Singleton is mijn favoriete patroon en gebruik het om iets op één punt te beheren. Het is flexibeler dan static klassen en kan status handhaven. Het kan interfaces implementeren, van andere klassen overnemen en overerving toestaan.

Mijn regel om te kiezen tussen static en singleton:

Als er een heleboel functies bij elkaar moeten worden gehouden, dan static is de keuze. Al het andere dat enige toegang tot bepaalde bronnen nodig heeft, kan worden geïmplementeerd singleton.


56
2017-12-30 20:55



Statische klasse: -

  1. U kunt het exemplaar van de statische klasse niet maken.

  2. Wordt automatisch geladen door .NET Framework common language runtime (CLR) wanneer het programma of de naamruimte met de klasse is geladen.

  3. Static Class kan geen constructor hebben.

  4. We kunnen de statische klasse niet doorgeven aan de methode.

  5. We kunnen de statische klasse niet overnemen in een andere statische klasse in C #.

  6. Een klasse met alle statische methoden.

  7. Betere prestaties (statische methoden worden verbonden tijdens het compileren)

Singleton: -

  1. U kunt één exemplaar van het object maken en opnieuw gebruiken.

  2. Singleton-instantie wordt voor de eerste keer gemaakt wanneer de gebruiker dit heeft aangevraagd.

  3. Singleton-klasse kan een constructor hebben.

  4. U kunt het object singleton-klasse maken en dit doorgeven aan de methode.

  5. Singleton-klasse zegt geen enkele beperking van overerving.

  6. We kunnen de objecten van een singleton-klasse maar niet van een statische klasse verwijderen.

  7. Methoden kunnen worden overschreven.

  8. Kan lui worden geladen wanneer nodig (statische klassen worden altijd geladen).

  9. We kunnen interface implementeren (statische klasse kan interface niet implementeren).


49
2018-06-01 11:42



Een statische klasse is er een die alleen statische methoden heeft, waarvoor een beter woord "functies" zou zijn. De ontwerpstijl belichaamd in een statische klasse is puur procedureel.

Singleton, aan de andere kant, is een patroon specifiek voor OO-ontwerp. Het is een instantie van een object (met alle inherente mogelijkheden, zoals polymorfisme), met een creatieprocedure die ervoor zorgt dat er slechts één exemplaar van die specifieke rol is gedurende zijn hele levensduur.


47
2018-02-06 08:35