Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Musterdesign-Singleton-Muster

PHP-Musterdesign-Singleton-Muster

WBOY
WBOYOriginal
2016-07-30 13:30:291231Durchsuche

Was ist Musterdesign? Anfänger werden von diesem hochtrabenden Namen zunächst abgeschreckt sein. Für Veteranen mit umfangreicher Programmiererfahrung ist Musterdesign allgegenwärtig. Viele Kontakt-Frameworks basieren auf verschiedenen Mustern. Vereinfacht gesagt kommt man beim Schreiben von Code am Anfang oft mit prozessorientierter, einfacher und grundlegender Programmierung in Berührung. Derzeit verfolgen wir häufig das Ziel, dass alles gut wird, wenn der Code eine bestimmte Funktion erfüllen kann. Es spielt keine Rolle, wie redundant der Code ist, ob er wiederverwendbar ist oder wie effizient er ist, solange er die Funktion erfüllen kann. Was jedoch in der Praxis wirklich Anwendung findet und von allen stärker angenommen wird, ist der Code, der effizient, wiederverwendbar und einfach für die Teamentwicklung ist. Basierend auf diesen Faktoren können Sie nicht einfach die Funktionen benennen und die Skripte so platzieren, wie Sie es beim Üben tun. Musterentwurfsanweisungen bieten Benutzern eine Idee, Code zu organisieren, wiederverwendbaren Code zu erreichen, den Code für andere leichter verständlich zu machen und die Codezuverlässigkeit sicherzustellen.

In allen Musterdesigns gibt es drei grundlegende Designmuster: Singleton-Muster, Fabrikmuster und Registrierungsbaummuster. Heute bringen wir das Singleton-Muster mit.

Was ist das Singleton-Muster?

Anhand dieses Namens können wir leicht verstehen, dass sich das Singleton-Muster auf ein Entwurfsmuster bezieht, bei dem es in der gesamten Anwendung nur eine Objektinstanz gibt.

Warum Singleton-Muster verwenden?

php befasst sich häufig mit Datenbanken. Wenn Sie häufig Verbindungsobjekte herstellen und neue Vorgänge in Ihrer Anwendung ausführen, werden große Mengen an Systemspeicherressourcen verbraucht ist nicht das, was wir sehen wollen. Darüber hinaus kann der Singleton-Modus in Teamkooperationsprojekten effektiv verhindern, dass verschiedene Programmierer ihre eigenen Objekte neu erstellen, was zu einem künstlichen Systemverbrauch führt.

Wie richtet man den Singleton-Modus ein?

Wenn ich dieses Problem sehe, glaube ich, dass hervorragende Programmierer wahrscheinlich versuchen werden, ein Singleton-Muster gemäß den Anforderungen zu erstellen, anstatt auf die Erfahrungen der Vorgänger zu warten. Im Gegensatz zu anderen Bloggern, die Ihnen sagen, was für ein Muster ein Singleton-Muster ist, denke ich lieber darüber nach, wie Sie ein Singleton-Muster selbst erstellen können, wenn Sie über grundlegende Erfahrung in der objektorientierten Programmierung verfügen.

Beginnen wir zunächst mit dem Titel. Das Singleton-Muster ist ein Entwurfsmuster mit nur einer Objektinstanz. Das ist sehr schmerzhaft. Die von uns normalerweise erstellten Klassen können entweder viele Objekte erstellen oder können keine Objekte erstellen (abstrakte Klassen). Zum Erstellen eines Objekts ist eine Klasse erforderlich, die keine abstrakte Klasse sein darf. Diese Klasse soll verhindern, dass andere Funktionen mehrmals erstellen. Wir haben natürlich darüber nachgedacht, mit dem Konstruktor zu beginnen. Allerdings ruft jede neue Operation den Konstruktor auf, was bedeutet, dass die Objektinstanz mehrmals erstellt wird. Dies widerspricht unserer ursprünglichen Designabsicht. Stellen Sie sicher, dass Sie den Konstruktor hier als privat oder geschützt deklarieren, um dieses Problem zu lösen.

Wenn der Konstruktor als privat oder geschützt deklariert ist, ist er zwangsläufig nicht in der Lage, über die neue Methode ein Instanzobjekt zu erstellen. Und wir haben festgestellt, dass nach diesem Verarbeitungsschritt die Aussichten für eine Lösung des Problems klar wurden? Warum? Da Objektinstanzen nicht über die neue Methode erstellt werden können, können wir Objektinstanzen nur über Methoden innerhalb der Klasse erstellen. Zurzeit stehen wir vor einem interessanten Henne-Ei-Problem. Wir rufen häufig die Methode des Objekts auf, nachdem wir das Objekt erstellt haben. Zu diesem Zeitpunkt müssen wir die Methode in der Klasse aufrufen, um das Objekt zu erstellen. Die Lösung für eine Methode, die unabhängig davon aufgerufen werden kann, ob das Objekt erstellt wurde, besteht zweifellos darin, das Schlüsselwort --static zu verwenden.

Was wird durch das Erstellen einer statischen Methode innerhalb einer Klasse erreicht? Zurück zum Thema: Stellen Sie sicher, dass Sie nur ein Instanzobjekt erstellen. Wie stellt man sicher, dass es nur einen gibt? Das ist ganz einfach, beurteilen Sie einfach, ob. Wenn es existiert, geben Sie es direkt zurück. Wenn es nicht existiert, erstellen Sie selbst eines. Natürlich ist dieses Instanzobjekt eine statische Eigenschaft der Klasse. Zu diesem Zeitpunkt sind die für den Singleton-Modus erforderlichen Funktionen implementiert. Ist es wirklich abgeschlossen? Wenn eine Klasse diese Klasse erbt, wäre es dann nicht eine schlechte Sache, den Konstruktor als öffentlich zu deklarieren? Dann ist es notwendig, das letzte Schlüsselwort vor der Konstruktormethode hinzuzufügen.

Fügen Sie abschließend den Code für den Singleton-Modus ein. Die Codeerklärungen finden Sie alle oben~~

<?<span>php
</span><span>class</span><span> Single{
    </span><span>public</span><span>$hash</span><span>;
    </span><span>static</span><span>protected</span><span>$ins</span>=<span>null</span><span>;
    </span><span>final</span><span>protected</span><span>function</span><span> __construct(){
        </span><span>$this</span>->hash=<span>rand</span>(1,9999<span>);
    }

    </span><span>static</span><span>public</span><span>function</span><span> getInstance(){
        </span><span>if</span> (self::<span>$ins</span><span> instanceof self) {
            </span><span>return</span> self::<span>$ins</span><span>;
        }
        self</span>::<span>$ins</span>=<span>new</span><span> self();
        </span><span>return</span> self::<span>$ins</span><span>;
    } 
}</span>

Der Singleton-Modus selbst ist nicht kompliziert, erfordert jedoch Folgendes -tiefes Verständnis. Viele Anfänger seufzen immer noch: Verdammt, der Konstruktor ist nicht immer öffentlich ~ Verdammt, Sie können Objekte erstellen, ohne new ~ zu verwenden. Tatsächlich möchte der Autor sagen, dass unabhängig davon, ob der Konstruktor als öffentlich, privat oder geschützt deklariert ist, der Das Objekt, das letztendlich erstellt wird, wird immer dann aufgerufen. New wird immer zum Erstellen von Objektinstanzen verwendet. Der Singleton-Modus verwendet auch New zum Erstellen von Objekten, ändert jedoch nur den Ort von außerhalb der Klasse nach innerhalb der Klasse.

Abschließend möchte ich den Programmierern meine Bewunderung aussprechen, die verschiedene exquisite Musterdesigns entwickelt haben~~

Das Obige stellt den Singleton-Modus des PHP-Modus-Designs vor, einschließlich einiger Aspekte des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

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