PHP-Entwurfsmuster (2)

WBOY
Freigeben: 2016-08-08 09:33:08
Original
905 Leute haben es durchsucht

Seit Kurzem habe ich mir zum Ziel gesetzt, jede Woche mindestens zwei Blogs zu aktualisieren, um die Probleme, auf die ich gestoßen bin, oder die neuen Ideen, die mir in der vergangenen Woche eingefallen sind, festzuhalten Ich habe es gemeistert, um nach langer Zeit nicht alles zu vergessen. Obwohl meine Blog-Beiträge nicht sehr gut sind, können sie eine gewisse Wirkung auf eine kleine Anzahl von Lesern haben, und ich glaube, dass ich immer mehr schreibe Original-Blog-Beiträge, das werde ich auf jeden Fall tun Das Niveau wird immer höher und die Tiefe wird immer tiefer (haha, ich beneide auch diese berühmten Blogger, die nicht nur über großartige Fachkenntnisse, sondern auch über großartige Schreibfähigkeiten verfügen). Bei zwei Artikeln pro Woche stelle ich fest, dass ich nicht alles aufzeichnen kann, was ich aufzeichnen möchte. Genau wie diese Woche habe ich auch ein Protokollsystem, einen Binärdaten-Cache (eigentlich ist es angemessener, es eine niedrigere Datenbank zu nennen). Über diese Aspekte der Massengenerierung habe ich in QQwry.dat nicht geschrieben. Okay, dieses Mal werde ich ein anderes Modell vorstellen.

  • Einfacher Werksmodus

Tatsächlich ist dieser Modus auch relativ häufig und sollte zuerst eingeführt werden. Da ich jedoch mit mehr Singleton-Modi in Kontakt gekommen bin, werde ich zuerst den Singleton-Modus vorstellen. Schauen Sie sich zunächst die Definition des Simple Factory-Musters an: Von der Art des Entwurfsmusters her handelt es sich beim Simple Factory-Muster um ein Erstellungsmuster, das auch als Static Factory Method-Muster bezeichnet wird, aber nicht zu den 23 GOF-Entwurfsmustern gehört. Das einfache Factory-Muster verwendet ein Factory-Objekt, um zu bestimmen, welche Produktklasseninstanz erstellt werden soll. Das einfache Factory-Pattern ist das einfachste und praktischste Pattern in der Factory-Pattern-Familie und kann als spezielle Implementierung verschiedener Factory-Patterns verstanden werden.

Welche Vorteile bietet das einfache Fabrikmodell in Projekten? Er hat zwei Vorteile:

1. Die erste besteht darin, das einfache Factory-Muster zu verwenden, um verschiedene Klassen gemäß unterschiedlichen Parametern zu instanziieren, anstatt die neue Methode zum Instanziieren jeder einzelnen Klasse zu verwenden, was den Benutzern eine bessere Verwaltung ermöglicht.

2. Zweitens, wenn die zu instanziierende Klasse in mehreren Dateien verwendet wird und wir den Klassennamen ändern, müssen wir nur die Factory-Klasse ändern, anstatt jede Datei zu ändern, die die Klasse instanziiert (ein bisschen geschmacklos). , was selten vorkommt).

Sehen Sie sich das klassischste und am besten verstandene Beispiel eines einfachen Fabrikmusters an: den Bedienerbetrieb:

Factory-Klassen im einfachen Factory-Muster verwenden im Allgemeinen statische Methoden, um verschiedene Objektinstanzen zurückzugeben, indem sie unterschiedliche Parameter akzeptieren. Der Code ist hartcodiert, sodass er nicht erweitert werden kann, ohne den Code zu ändern, was gegen OCP verstößt (für die Erweiterungsentwicklung). der Schließung von Änderungen).

<?<span>php
</span><span>/*</span><span>*
 * 简单工厂模式&mdash;&mdash;经典运算符例子
 * @author 燕睿涛(luluyrt@163.com)
 </span><span>*/</span>
<span>/*简单</span><span>工********************厂********************类</span><span>*/</span>
<span>class</span><span> Operation{
    </span><span>/*</span><span>*
     * @var int $numa
     * 要操作的两个数字
     </span><span>*/</span>
    <span>protected</span> <span>$numa</span><span>;
    </span><span>protected</span> <span>$numb</span><span>;
    </span><span>public</span> <span>function</span> __construct(<span>$a</span>,<span>$b</span><span>){
        </span><span>$this</span>->numa = <span>$a</span><span>;
        </span><span>$this</span>->numb = <span>$b</span><span>;
    }

    </span><span>//</span><span>静态方法,通过接受不同的参数生成不同的对象实例</span>
    <span>public</span> <span>static</span> <span>function</span> create(<span>$operation</span>,<span>$a</span>,<span>$b</span><span>){
        </span><span>switch</span> (<span>$operation</span><span>) {
            </span><span>case</span> '+':
                <span>return</span> <span>new</span> Operationadd(<span>$a</span>,<span>$b</span><span>);
                </span><span>break</span><span>;
            
            </span><span>case</span> '-':
                <span>return</span> <span>new</span> Operationminus(<span>$a</span>,<span>$b</span><span>);
                </span><span>break</span><span>;
            </span><span>default</span>:
                <span>#</span><span> code...</span>
                <span>break</span><span>;
        }
    }

}
</span><span>/*</span><span>**********************************************</span><span>*/</span>

<span>/*</span><span>加法</span><span>*/</span>
<span>class</span> Operationadd <span>extends</span><span> Operation{
    </span><span>public</span> <span>function</span><span> doing(){
        </span><span>return</span> <span>$this</span>->numa + <span>$this</span>-><span>numb;
    }
}

</span><span>/*</span><span>减法</span><span>*/</span>
<span>class</span> Operationminus <span>extends</span><span> Operation{
    </span><span>public</span> <span>function</span><span> doing(){
        </span><span>return</span> <span>$this</span>->numa - <span>$this</span>-><span>numb;
    }
}

</span><span>$test</span> = Operation::create('+',2,56<span>);
</span><span>echo</span> <span>$test</span>->doing();
Nach dem Login kopieren
  • Werksmodus

Ich bin in meinen Projekten bisher nur mit dem einfachen Fabrikmuster in Berührung gekommen. Um diesen Artikel zu schreiben, habe ich die Informationen überprüft und festgestellt, dass es drei Fabrikmuster gibt: einfaches Fabrikmuster (auch statisches Fabrikmuster genannt), Nach dem Lesen des Fabrikmusters bin ich der Meinung, dass es nur dann dem OCP-Prinzip entspricht, wenn es neue Produkte gibt, die der abstrakten Produktschnittstelle und der abstrakten Fabrikschnittstelle entsprechen Es ist nicht erforderlich, ein bestimmtes Produkt und eine bestimmte Fabrik zu erweitern. Der ursprüngliche Code muss nicht geändert werden. Fassen wir die Vor- und Nachteile des Fabrikmodus zusammen:

Vorteile: Erstens entspricht es dem OCP-Prinzip und die Skalierbarkeit wird verbessert; zweitens wird die Wartbarkeit verbessert. Wenn Sie eine bestimmte Fabrikrolle ändern, müssen Sie nur Ihre eigene Fabrikrolle finden Sie müssen sich Sorgen machen, dass die Implementierung anderer Fabrikrollen beeinträchtigt wird.

Nachteile: Zu viel Code, jedes Produkt erfordert eine Produktklasse und eine Fabrikklasse. Dieser Mangel kann durch die Kombination des einfachen Fabrikmusters und des Fabrikmusters behoben werden, indem Fabrikklassen ähnlicher Produktklassen zu einer zusammengefasst werden.

<?<span>php
</span><span>/*</span><span>*
 * 简单工厂模式&mdash;&mdash;经典运算符例子
 * @author 燕睿涛(luluyrt@163.com)
 </span><span>*/</span>
<span>/*</span><span>工*********厂**********方**********法</span><span>*/</span>
<span>//</span><span>交通工具接口(抽象产品角色)</span>
<span>interface</span><span> vehicle{
    </span><span>public</span> <span>function</span><span> runing();
}
</span><span>//</span><span>交通工具工厂接口(抽象工厂角色)</span>
<span>interface</span><span> vehiclefactory{
    </span><span>public</span> <span>static</span> <span>function</span><span> get();
}
</span><span>/*</span><span>具体产品角色</span><span>*/</span>
<span>class</span> car <span>implements</span><span> vehicle{
    </span><span>public</span> <span>function</span><span> runing(){
        </span><span>echo</span> "My speed is 120KM/h \r"<span>;
    }
}

</span><span>class</span> bicycle <span>implements</span><span> vehicle{
    </span><span>public</span> <span>function</span><span> runing(){
        </span><span>echo</span> "My speed is 30KM/h \r"<span>;
    }
}
</span><span>/*</span><span>具体工厂角色</span><span>*/</span>
<span>class</span> carfactory <span>implements</span><span> vehiclefactory{
    </span><span>public</span> <span>static</span> <span>function</span><span> get(){
        </span><span>return</span> <span>new</span><span> car();
    }
}
</span><span>class</span> bicyclefactory <span>implements</span><span> vehiclefactory{
    </span><span>public</span> <span>static</span> <span>function</span><span> get(){
        </span><span>return</span> <span>new</span><span> bicycle();
    }
}

</span><span>$test</span> = bicyclefactory::<span>get();
</span><span>$test</span>->runing();
Nach dem Login kopieren

Ich habe die Fabrikklasse noch nie in einem bestimmten Projekt verwendet. Es fühlt sich immer etwas seltsam an, wenn etwas falsch oder unangemessen ist. Ich hoffe, dass alle Experten und Senioren darauf hinweisen.

Schick mir~

Das Obige hat das PHP-Entwurfsmuster (2) vorgestellt, einschließlich einiger Aspekte des Inhalts. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle: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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!