Im vorherigen Artikel „Eine ausführliche Analyse des Template-Methodenmusters in PHP“ haben wir das Template-Methodenmuster in PHP vorgestellt. Dieser Artikel führt Sie zum Verständnis des Singleton-Musters in PHP-Entwurfsmustern.
Das Singleton-Muster steht definitiv an erster Stelle unter den häufig verwendeten und häufig gestellten Interview-Designmustern. Einerseits ist es einfach genug und kann in wenigen Worten erklärt werden. Andererseits ist die Implementierung nicht nur in einer Form erforderlich, sondern muss auch das Problem der Multithread-Sperre in asynchronen Sprachen wie Java berücksichtigen. Denken Sie also nicht, dass der Interviewer sich während des Interviews entspannen wird, wenn er die Frage zum Singleton-Modell stellt. Dieses Modell kann wirklich tiefgründig oder oberflächlich sein und das Niveau eines Entwicklers extrem widerspiegeln. Denn solange man eine Zeit lang arbeitet, wird man unweigerlich mit diesem Modell in Berührung kommen.
GoF-Definition: Stellen Sie sicher, dass eine Klasse nur eine Instanz hat und stellen Sie einen globalen Zugriffspunkt für den Zugriff darauf bereit.
GoF-Klassendiagramm
Code-Implementierung
class Singleton { private static $uniqueInstance; private $singletonData = '单例类内部数据'; private function __construct() { // 构造方法私有化,外部不能直接实例化这个类 } public static function GetInstance() { if (self::$uniqueInstance == null) { self::$uniqueInstance = new Singleton(); } return self::$uniqueInstance; } public function SingletonOperation(){ $this->singletonData = '修改单例类内部数据'; } public function GetSigletonData() { return $this->singletonData; } }
Ja, der Kern ist so eine Singleton-Klasse, sonst nichts. Lassen Sie die statische Variable nach der Instanziierung selbst speichern. Wenn dieses Objekt benötigt wird, rufen Sie die Methode GetInstance() auf, um das global eindeutige Objekt abzurufen. Wenn wir
$singletonA = Singleton::GetInstance(); echo $singletonA->GetSigletonData(), PHP_EOL; $singletonB = Singleton::GetInstance(); if ($singletonA === $singletonB) { echo '相同的对象', PHP_EOL; } $singletonA->SingletonOperation(); // 这里修改的是A echo $singletonB->GetSigletonData(), PHP_EOL;
auf der Clientseite aufrufen, werden wir feststellen, dass singletonB genau dasselbe Objekt ist.
Beispiel
Da ich oben gesagt habe, gefallen mir sowohl die Datenbankoperationsklasse als auch die Netzwerkanforderungsklasse. Wenn wir den Singleton-Modus verwenden, werden wir es tun Implementieren Sie die Entwicklung des Singleton-Modus der HTTP-Anforderungsklasse. Ich erinnere mich, dass es vor langer Zeit, als ich an Android arbeitete, nicht so viele Frameworks gab wie heute, die alle einzeln gekapselt waren und die meisten Online-Tutorials den Singleton-Modus übernahmen.
Anleitung
- Ist es immer noch sehr einfach? Ich werde hier nicht mehr über diese Form von Singletons sprechen.
In statischen Sprachen wie Java können statische Variablen direkt neue Objekte sein die Deklaration
instance = new HttpService();. Auf diese Weise kann die Methode GetInstance() weggelassen werden, aber diese statische Variable wird direkt instanziiert und belegt Speicher, unabhängig davon, ob sie verwendet wird oder nicht. Diese Art von Singleton wird als hungriges chinesisches Singleton-Muster bezeichnet.
- Unser Code und unsere Beispiele sind offensichtlich nicht im Hungry-Man-Stil, diese Form wird als Lazy-Man-Stil bezeichnet. Sie müssen GetInstance() aktiv verwenden, um es abzurufen, und dann erstelle ich das Objekt.
- In Multithread-Anwendungen wie Java-Multithreading oder der Verwendung von Swoole in PHP tritt das Problem der wiederholten Erstellung auf und die mehrfach erstellten Objekte sind nicht dasselbe Objekt. Derzeit wird im Allgemeinen die Doppelerkennung verwendet, um sicherzustellen, dass nur ein globales Objekt vorhanden ist. Sie können den spezifischen Code selbst finden. Mit dem Hungry Han-Stil wird es kein Problem geben. Der Hungry Han-Stil selbst hat dem statischen Attribut bereits einen Wert zugewiesen und wird sich nicht mehr ändern.
- Eine andere Möglichkeit besteht darin, statische innere Klassen zu erstellen. Dies kommt selten vor und die Ressourcenauslastung ist hoch. Fügen Sie die statische Variable in die Methode ein, sodass die statische Variable zu einer Variablen innerhalb der Methode und nicht zu einer Variablen in der Klasse wird. Es ermöglicht einem Singleton-Objekt, seine eigenen statischen Methoden und Eigenschaften aufzurufen.
Ursprüngliche Adresse: https://juejin.cn/post/6844903990585458702
Autor: Hardcore Project Manager
Empfohlenes Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonLassen Sie uns über das Singleton-Muster in PHP sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!