Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Entwurfsmuster: Detaillierte Erläuterung des Singleton-Musters und des Factory-Musters

PHP-Entwurfsmuster: Detaillierte Erläuterung des Singleton-Musters und des Factory-Musters

怪我咯
怪我咯Original
2017-07-12 14:09:491292Durchsuche

1. Singleton-Muster

Das Singleton-Muster ist ein häufig verwendetes Software-Entwurfsmuster. Es enthält in seiner Kernstruktur nur eine spezielle Klasse, die Singleton-Klasse genannt wird. Der Singleton-Modus kann sicherstellen, dass es nur eine Instanz einer Klasse im System gibt und dass die Instanz von außen leicht zugänglich ist, wodurch die Kontrolle über die Anzahl der Instanzen erleichtert und Systemressourcen gespart werden. Wenn Sie möchten, dass nur ein Objekt einer bestimmten Klasse im System vorhanden ist, ist das Singleton-Muster die beste Lösung.

Vorteile

1. Instanzkontrolle

Das Singleton-Muster verhindert, dass andere Objekte Kopien ihrer eigenen Singleton-Objekte instanziieren, wodurch sichergestellt wird, dass alle Objekte Zugriff auf eine eindeutige Instanz haben.

2. Flexibilität

Da die Klasse den Instanziierungsprozess steuert, kann die Klasse den Instanziierungsprozess flexibel ändern.

In diesem Artikel werden hauptsächlich die relevanten Kenntnisse des Einzelfallmodus und des Werksmodus in PHP vorgestellt. Es hat einen sehr guten Referenzwert, schauen wir uns den Editor unten an

Die Gründe für die Verwendung des Singleton-Modus in PHP

Ich verwende Die meisten Operationen von PHP befassen sich mit verschiedenen Datenbanken, einschließlich MySQL, Redis, Memcache und anderen relationalen und nichtrelationalen Datenbanken, sodass es in einer Anwendung eine große Anzahl verbundener Datenbanken geben wird. Wenn Sie den Singleton-Modus nicht verwenden, benötigen Sie jedes Mal einen neuen Vorgang, aber jeder neue Vorgang verbraucht eine Menge Speicherressourcen und Systemressourcen, und jedes Mal, wenn Sie die Datenbankverbindung öffnen und schließen, ist dies ein großartiger Test und Test für die Datenbankverschwendung.

Erfordert eine statische Mitgliedsvariable, die die einzige Instanz der Klasse enthält (normalerweise ist $instance eine private Variable)

Konstruktor und Klonfunktion müssen in als privat deklariert werden Um zu verhindern, dass die neue Klasse des externen Programms die Bedeutung des Singleton-Modus verliert, muss

eine öffentliche statische Methode bereitstellen, um auf diese Instanz zuzugreifen, wodurch ein Verweis auf die einzige Instanz zurückgegeben wird

//设计模式
//单例模式 都是使用同一个对象
//class Ren
//{
// public $name;
// private static $dx; //存储对象
//
// private function construct()
// {
//
// }
//
// public static function DuiXiang()
// {
//  if(empty(self::$dx))
//  {
//   self:;$dx=new Ren();
//  }
//  return self::$dx;
// }
//}
//
//$r= Ren::DuiXiang();
//把构造函数变为私有
//做了一个方法来间接造对象
//在该方法里面加限制

2. Factory-Muster

Das Factory-Muster ist ein Muster, das speziell dafür verantwortlich ist, eine große Anzahl von Klassen mit einer gemeinsamen Schnittstelle (oder einer gemeinsamen abstrakten Elternklasse) zu instanziieren, ohne vorher zu wissen, welche Klasse, die jedes Mal instanziiert werden soll. Es definiert eine Schnittstelle zum Erstellen von Objekten und Unterklassen entscheiden, welche Klasse instanziiert werden soll.

Vorteile
Die Factory-Klasse ist der Schlüssel zum gesamten Muster. Sie enthält die notwendige logische Beurteilung, um anhand der von der Außenwelt bereitgestellten Informationen zu bestimmen, welche spezifische Klasse von Objekten erstellt werden soll Mit der Factory-Klasse kann die Außenwelt die peinliche Situation loswerden, bestimmte Produktobjekte direkt zu erstellen, und muss nur noch für den „Verbrauch“ von Objekten verantwortlich sein. Es spielt keine Rolle, wie diese Objekte erstellt und organisiert werden. Die Klärung der jeweiligen Verantwortlichkeiten und Rechte trägt zur Optimierung der gesamten Softwarearchitektur bei.
Nachteile
Da die Fabrikklasse die Erstellungslogik aller Instanzen konzentriert, verstößt sie gegen das Prinzip der Verantwortungszuweisung mit hoher Kohäsion und konzentriert die gesamte Erstellungslogik in einer Fabrikklasse. Die Klassen, die sie erstellen kann, können nur im Voraus berücksichtigt werden Ja, wenn Sie eine neue Klasse hinzufügen müssen, müssen Sie die Factory-Klasse ändern.
Wenn die Anzahl spezifischer Produktkategorien im System weiter zunimmt, muss die Factory-Klasse möglicherweise unterschiedliche Instanzen entsprechend unterschiedlichen Bedingungen erstellen. Diese Beurteilung der Bedingungen und die Beurteilung spezifischer Produkttypen sind miteinander verflochten, was es schwierig macht, die Verbreitung von Modulfunktionen zu vermeiden, und sich sehr nachteilig auf die Systemwartung und -erweiterung auswirkt.
Diese Mängel wurden in der Fabrikmethode bis zu einem gewissen Grad behoben Muster.
Verwendungsszenarien
Die Factory-Klasse ist dafür verantwortlich, weniger Objekte zu erstellen als ; Kunden kennen nur die an die Factory-Klasse übergebenen Parameter und kümmern sich nicht darum, wie Objekte erstellt werden (Logik). ;
Da einfache Fabriken leicht gegen das Prinzip der Verantwortungsverteilung mit hoher Kohäsion verstoßen können, werden sie im Allgemeinen nur in sehr einfachen Situationen verwendet.

Normalerweise verfügt das Factory-Muster über eine statische Methode mit dem Namen Factory. Dies ist jedoch nur ein Prinzip. Diese statische Methode kann auch beliebig benannt werden Akzeptieren Sie Parameter aller Daten. Es muss ein Objekt zurückgegeben werden.

Das obige ist der detaillierte Inhalt vonPHP-Entwurfsmuster: Detaillierte Erläuterung des Singleton-Musters und des Factory-Musters. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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