Inhaltsverzeichnis
1. Einfache Implementierung" >1. Einfache Implementierung
2. Thread-Sicherheit" >2. Thread-Sicherheit
3. Doppelte Verriegelung" > 3. Doppelte Verriegelung
4. Statische Initialisierung" >4. Statische Initialisierung
5. Verzögerte Initialisierung" >5. Verzögerte Initialisierung
Heim Backend-Entwicklung C#.Net-Tutorial Analyse von Singleton-Mustern und gängigen Schreibmethoden (Entwurfsmuster 01)

Analyse von Singleton-Mustern und gängigen Schreibmethoden (Entwurfsmuster 01)

Feb 13, 2017 am 11:39 AM

Stellt sicher, dass eine Klasse nur eine Instanz hat und stellt einen globalen Zugriffspunkt auf die Instanz bereit.

——„Entwurfsmuster“

Das Konzept des Singleton-Modus ist unten sehr einfach C# Am Beispiel der Sprache werden die Vor- und Nachteile gängiger Singleton-Schreibmethoden aufgeführt.

1. Einfache Implementierung

 public sealed class Singleton
    {
        static Singleton instance = null;

        public void Show()
        {
            Console.WriteLine(  "instance function");
        }
        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }
Nach dem Login kopieren

Kommentare:


Nicht sicher für Threads
Die Anforderungen werden in einem einzelnen Thread erfüllt
Vorteile:
Da sich die Instanz innerhalb der Instanzeigenschaftenmethode befindet Damit die Klasse zusätzliche Funktionen nutzen kann, führt
keine Instanziierung durch, bis das Objekt eine Instanz erfordert; dieser Ansatz wird „Lazy Instantiation“ genannt. Durch die verzögerte Instanziierung wird die unnötige Instanziierung von Singletons beim Start der Anwendung vermieden.


2. Thread-Sicherheit

public sealed class Singleton
    {
        static Singleton instance = null;
        private static readonly object padlock = new object();

        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }

                return instance;
            }
        }
    }
Nach dem Login kopieren



Kommentar:

Der Teil, der gleichzeitig gesperrt wurde Da ist nur ein Thread, der das Programm betreten kann
Die Objektinstanz wird von dem Thread erstellt, der zuerst eintritt
Die nachfolgenden Threads (Instanz == null) sind falsch, wenn Eingabe, nicht. Wird erneut Objektinstanzen erstellen
fügt zusätzlichen Overhead hinzu und verliert an Leistung


3. Doppelte Verriegelung

 public sealed class Singleton
    {
        static Singleton instance = null;
        private static readonly object padlock = new object();

        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton();
                        }
                    }
                }
                return instance;
            }
        }
    }
Nach dem Login kopieren

Kommentare:


Multi-Thread-sicher
Threads werden nicht jedes Mal gesperrt
Ermöglicht die Verzögerung der Instanziierung bis zum ersten Zugriff auf das Objekt


4. Statische Initialisierung

 public sealed class Singleton
    {
        private static readonly Singleton instance = null;
        static Singleton()
        {
            instance = new Singleton();
        }
        private Singleton()
        {
        }
        public static Singleton Instance
        {
            get
            {
                return instance;
            }
        }
    }
Nach dem Login kopieren

Kommentare:


Hängt von der Common Language Runtime ab, um die Variableninitialisierung zu handhaben
Öffentlich statisch Eigenschaften Bietet einen globalen Zugriffspunkt für den Zugriff auf Instanzen
Weniger Kontrolle über den Instanziierungsmechanismus (implementiert durch .NET)
Statische Initialisierung ist in .NET implementiert. Die bevorzugte Methode von Singleton

Kleiner Hinweis:

Statische Konstruktoren haben keine Zugriffsmodifikatoren, C# markiert sie automatisch als privat, der Grund dafür muss als privat markiert sein.

soll verhindern, dass der von Entwicklern geschriebene Code ihn aufruft Dies durch die CLR.







5. Verzögerte Initialisierung

public sealed class Singleton
    {
        private Singleton()
        {
        }
        public static Singleton Instance
        {
            get
            {
                return Nested.instance;
            }
        }

        public static void Hello()
        {
        }

        private class Nested
        {
            internal static readonly Singleton instance = null;
            static Nested()
            {
                instance = new Singleton();
            }
        }
    }
Nach dem Login kopieren

Kommentare:


Die Initialisierungsarbeit Dies geschieht durch die Verwendung eines statischen Mitglieds der Nested-Klasse, wodurch eine verzögerte Initialisierung erreicht wird.

Da der Zeitpunkt des Aufrufs statischer Funktionen der Zeitpunkt ist, an dem die Klasse instanziiert oder das statische Mitglied aufgerufen wird, Und das .net-Framework ruft den statischen Konstruktor auf, um die statischen Mitgliedsvariablen zu initialisieren, Wenn Sie es also gemäß der vierten Methode schreiben, wann Wenn die Hello-Methode erneut aufgerufen wird, wird eine Singleton-Instanz instanziiert. Dies ist nicht das, was wir sehen möchten, , da wir möglicherweise nur die Hello-Methode und nichts anderes verwenden möchten.


Hinweise:

1 Der Instanzkonstruktor im Singleton-Modus kann auf geschützt gesetzt werden, um die Ableitung von Unterklassen zu ermöglichen.
2. Der Singleton-Modus unterstützt die ICloneable-Schnittstelle im Allgemeinen nicht, da dies zu mehreren Objektinstanzen führen kann, was der ursprünglichen Absicht des Singleton-Modus widerspricht.
3. Der Singleton-Modus unterstützt im Allgemeinen keine Serialisierung, da dies auch zu mehreren Objektinstanzen führen kann, was ebenfalls der ursprünglichen Absicht des Singleton-Modus widerspricht.
4. Der Singletom-Modus berücksichtigt nur die Verwaltung der Objekterstellung, nicht jedoch die Verwaltung der Objektzerstörung. In Bezug auf Plattformen, die die Speicherbereinigung und den Overhead von Objekten unterstützen, müssen wir im Allgemeinen keine spezielle Verwaltung ihrer Zerstörung durchführen.


Zusammenfassung:

1 Muster schränken die Klassenerstellung ein, statt sie zu verbessern.
2. Der Kern des Verständnisses und der Erweiterung des Singleton-Musters besteht darin, „den willkürlichen Aufruf des Benutzers an den Konstruktor einer Klasse mithilfe von new zu steuern“.
3. Sie können einen Singleton leicht ändern, um einige Instanzen zu haben.


Das Obige ist der Inhalt des Singleton-Musters und der allgemeinen Schreibanalyse (Entwurfsmuster 01), mehr verwandt Bitte achten Sie hinsichtlich des Inhalts auf die chinesische PHP-Website (www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ein Artikel zum Verständnis des Singleton-Musters in JavaScript Ein Artikel zum Verständnis des Singleton-Musters in JavaScript Apr 25, 2023 pm 07:53 PM

Das JS-Singleton-Muster ist ein häufig verwendetes Entwurfsmuster, das sicherstellt, dass eine Klasse nur eine Instanz hat. Dieser Modus wird hauptsächlich zur Verwaltung globaler Variablen verwendet, um Namenskonflikte und wiederholtes Laden zu vermeiden. Außerdem kann er die Speichernutzung reduzieren und die Wartbarkeit und Skalierbarkeit des Codes verbessern.

Die Anwendung des Singleton-Modus und des Factory-Modus beim Überladen und Umschreiben von C++-Funktionen Die Anwendung des Singleton-Modus und des Factory-Modus beim Überladen und Umschreiben von C++-Funktionen Apr 19, 2024 pm 05:06 PM

Singleton-Muster: Stellen Sie Singleton-Instanzen durch Funktionsüberladung unterschiedliche Parameter zur Verfügung. Fabrikmuster: Erstellen Sie verschiedene Objekttypen durch Umschreiben von Funktionen, um den Erstellungsprozess von bestimmten Produktklassen zu entkoppeln.

Erste Schritte mit PHP: Singleton-Muster Erste Schritte mit PHP: Singleton-Muster May 20, 2023 am 08:13 AM

Bei der Softwareentwicklung kommt es häufig vor, dass mehrere Objekte auf dieselbe Ressource zugreifen müssen. Um Ressourcenkonflikte zu vermeiden und die Programmeffizienz zu verbessern, können wir Entwurfsmuster verwenden. Unter diesen ist das Singleton-Muster eine häufig verwendete Methode zum Erstellen von Objekten, die sicherstellt, dass eine Klasse nur eine Instanz hat und globalen Zugriff bietet. In diesem Artikel wird die Verwendung von PHP zur Implementierung des Singleton-Musters vorgestellt und einige Best-Practice-Vorschläge gegeben. 1. Was ist der Singleton-Modus? Der Singleton-Modus ist eine häufig verwendete Methode zum Erstellen von Objekten. Seine Eigenschaft besteht darin, sicherzustellen, dass eine Klasse nur eine Instanz hat und bereitstellt

Was ist in PHP das Konzept des Singleton-Entwurfsmusters? Was ist in PHP das Konzept des Singleton-Entwurfsmusters? Aug 18, 2023 pm 02:25 PM

Das Singleton-Muster stellt sicher, dass eine Klasse nur eine Instanz hat und stellt einen globalen Zugriffspunkt bereit. Dadurch wird sichergestellt, dass in der Anwendung nur ein Objekt verfügbar und unter Kontrolle ist. Das Singleton-Muster bietet eine Möglichkeit, direkt auf sein eindeutiges Objekt zuzugreifen, ohne das Objekt der Klasse zu instanziieren. Beispiel<?php classdatabase{ publicstatic$connection;

PHP-Entwurfsmuster: Der Weg zur Code-Exzellenz PHP-Entwurfsmuster: Der Weg zur Code-Exzellenz Feb 21, 2024 pm 05:30 PM

Einführung PHP-Entwurfsmuster sind eine Reihe bewährter Lösungen für häufige Herausforderungen in der Softwareentwicklung. Durch Befolgen dieser Muster können Entwickler eleganten, robusten und wartbaren Code erstellen. Sie unterstützen Entwickler bei der Einhaltung der SOLID-Prinzipien (Single Responsibility, Open-Closed, Liskov Replacement, Interface Isolation und Dependency Inversion) und verbessern so die Lesbarkeit, Wartbarkeit und Skalierbarkeit des Codes. Arten von Designmustern Es gibt viele verschiedene Designmuster, jedes mit seinem eigenen einzigartigen Zweck und seinen eigenen Vorteilen. Hier sind einige der am häufigsten verwendeten PHP-Entwurfsmuster: Singleton-Muster: Stellt sicher, dass eine Klasse nur eine Instanz hat und bietet eine Möglichkeit, global auf diese Instanz zuzugreifen. Factory-Muster: Erstellt ein Objekt, ohne seine genaue Klasse anzugeben. Es ermöglicht Entwicklern dies unter bestimmten Bedingungen

Anwendungsszenarien und Thread-Sicherheitsprozesse des Singleton-Modus in verteilten PHP-Systemen Anwendungsszenarien und Thread-Sicherheitsprozesse des Singleton-Modus in verteilten PHP-Systemen Oct 15, 2023 pm 04:48 PM

Anwendungsszenarien und Thread-Sicherheitsprozesse des Singleton-Modus in verteilten PHP-Systemen Einführung: Mit der rasanten Entwicklung des Internets sind verteilte Systeme zu einem heißen Thema in der modernen Softwareentwicklung geworden. In verteilten Systemen war Thread-Sicherheit schon immer ein wichtiges Thema. In der PHP-Entwicklung ist das Singleton-Muster ein häufig verwendetes Entwurfsmuster, mit dem die Probleme der Ressourcenfreigabe und der Thread-Sicherheit effektiv gelöst werden können. Dieser Artikel konzentriert sich auf die Anwendungsszenarien und Thread-Sicherheitsprozesse des Singleton-Musters in verteilten PHP-Systemen und stellt spezifische Codebeispiele bereit. 1. Singleton-Modus

Entdecken Sie die Geheimnisse der PHP-Designmuster Entdecken Sie die Geheimnisse der PHP-Designmuster Feb 21, 2024 pm 01:19 PM

1. Was sind PHP-Designmuster? PHP-Entwurfsmuster sind vordefinierte Codevorlagen, die zur Lösung häufiger Softwareentwicklungsprobleme entwickelt wurden. Sie bieten bewährte Lösungen, die die Wiederverwendbarkeit, Wartbarkeit und Skalierbarkeit von Code verbessern. 2. Arten von PHP-Entwurfsmustern Es gibt viele verschiedene Entwurfsmuster in PHP, und jedes Muster hat seinen spezifischen Zweck. Zu den häufigsten Mustern gehören: Singleton-Muster: Stellt sicher, dass es nur eine Instanz einer Klasse gibt. Factory-Muster: Erstellt Objekte unterschiedlichen Typs basierend auf den an ihn übergebenen Daten. Strategiemodus: Ermöglicht einem Programm, sein Verhalten zur Laufzeit zu ändern. Beobachtermuster: Ermöglicht Objekten, Ereignisse zu abonnieren und benachrichtigt zu werden, wenn Ereignisse auftreten. 3. Beispiel für den Singleton-Modus classSingleInstance{private

Analyse gängiger Anwendungsszenarien von Singleton-Mustern in PHP Analyse gängiger Anwendungsszenarien von Singleton-Mustern in PHP Oct 15, 2023 pm 01:25 PM

Überblick über die Analyse gängiger Anwendungsszenarien des Singleton-Musters in PHP: Das Singleton-Muster (SingletonPattern) ist ein Erstellungsentwurfsmuster, das sicherstellt, dass eine Klasse nur eine Instanz hat und einen globalen Zugriffspunkt für den Zugriff auf die Instanz bereitstellt. In PHP kann die Verwendung des Singleton-Modus die Anzahl der Instanziierungen und die Ressourcennutzung einer Klasse effektiv begrenzen und die Leistung und Wartbarkeit des Codes verbessern. In diesem Artikel werden gängige Anwendungsszenarien analysiert und spezifische PHP-Codebeispiele gegeben, um die Verwendung und Vorteile des Singleton-Musters zu veranschaulichen. Datenbankverbindungsrohr

See all articles