Heim  >  Artikel  >  Backend-Entwicklung  >  Einfache praktische Beispiele verschiedener PHP-Designmuster

Einfache praktische Beispiele verschiedener PHP-Designmuster

小云云
小云云Original
2018-03-14 10:47:331558Durchsuche

Ich hatte immer das Gefühl, dass Frameworks, Versionen und sogar Sprachen für einen Programmierer wirklich keine Rolle spielen. Die Beherrschung eines besonders fortgeschrittenen Frameworks oder einer neuen, seltenen Sprache spielt keine Rolle, denn Sie sind in Ordnung, es ist in Ordnung Wenn ich Zeit verbringen möchte, ist jeder so. Deshalb sind vor allem die Grundlegenden wichtig, nämlich Algorithmen und Datenstrukturen, und dann gute Entwurfsmuster.

Singleton-Modus

Funktionen des Singleton-Modus

  • $_instance muss als statische private Variable deklariert werden

  • Konstruktoren und Klonfunktionen müssen als privat deklariert werden, um zu verhindern, dass externe Programme neue Klassen hinzufügen und somit die Bedeutung des Singleton-Modus verlieren.

  • Die Methode getInstance() muss als öffentlich deklariert werden. Diese Methode muss aufgerufen werden, um einen Verweis auf eine eindeutige Instanz zurückzugeben

  • :: Der Operator kann nur auf statische Variablen oder statische Funktionen zugreifen

  • Single Der Beispielmodus ist relativ, da der Interpretations- und Ausführungsmechanismus von PHP dazu führt, dass alle zugehörigen Ressourcen recycelt werden, nachdem jede PHP-Seite interpretiert und ausgeführt wurde.

<?php
header("Content-type: text/html; charset=utf-8");
    class single{
        public static $arr=array(&#39;host&#39;=>&#39;XXX&#39;,&#39;user&#39;=>&#39;XXX&#39;,&#39;password&#39;=>&#39;XXX&#39;);
        private static $_instance =null;
        private function __construct(){}
        private function __clone(){}
        static public function getInstance(){
            if(self::$_instance== null || isset(self::$_instance)){
                self::$_instance= new self;
            }
                return self::$_instance;   
        }
        public function showSomething(){
            return self::$arr;
        }
    }
    /////////////////////test///////////////
    $a=single::getInstance();
    print_r(single::getInstance()->showSomething());
?>

Factory-Muster

Eine Factory-Klasse ist eine Klasse, die speziell zum Erstellen anderer Objekte verwendet wird. Die Factory-Klasse ist in der Praxis der polymorphen Programmierung sehr wichtig. Es ermöglicht den dynamischen Austausch von Klassen und die Änderung von Konfigurationen, wodurch die Anwendung flexibler wird. Die Beherrschung des Fabrikmusters ist für die Webentwicklung unerlässlich.
Funktionen:

Factory-Muster werden normalerweise verwendet, um verschiedene Klassen zurückzugeben, die Schnittstellen ähneln. Eine häufige Verwendung von Factorys besteht darin, polymorphe Anbieter zu erstellen.

Normalerweise verfügt das Factory-Muster über ein Schlüsselkonstrukt, bei dem es sich um eine statische Methode handelt, die normalerweise Factory genannt wird. Diese statische Methode kann beliebig viele Parameter akzeptieren und muss ein Objekt zurückgeben.

Fabrikmuster ist unterteilt in:

Einfache Fabrik

Fabrikmethode

Abstrakte Fabrik)
Einfacher Fabrikmodus: Wird zur Herstellung jedes Produkts verwendet die gleiche hierarchische Struktur. Sie können nichts gegen das Hinzufügen neuer Produkte unternehmen.

Fabrikmodus: Wird zur Herstellung fester Produkte in derselben hierarchischen Struktur verwendet. (Unterstützt das Hinzufügen beliebiger Produkte)

Abstrakte Fabrik: Wird zur Herstellung aller Produkte verschiedener Produktfamilien verwendet. (Sie können nichts gegen das Hinzufügen neuer Produkte unternehmen; Unterstützung beim Hinzufügen von Produktfamilien)

<?php
//简单工厂模式
header("Content-type: text/html; charset=utf-8");
class simpale{
    public function calculate($num1,$num2,$operator){
                try {
                    $result=0;
                    switch ($operator){
                        case &#39;+&#39;:
                            $result= $num1+$num2;
                            break;
                        case &#39;-&#39;:
                            $result= $num1-$num2;
                            break;
                        case &#39;*&#39;:
                            $result= $num1*$num2;
                            break;
                        case &#39;/&#39;:
                            if ($num2==0) {
                                throw new Exception("除数不能为0");
                            }
                            $result= $num1/$num2;
                            break;
                    }
                return $result;
                }
                catch (Exception $e){
                    echo "您输入有误:".$e->getMessage();
               }
            }
}
//工厂方法模式
    interface  people {
            function  jiehun();
    }
    //定义接口
    class man implements people{
        public $ring=null;
        public $car=null;
        public $house=null;
        public function getAllthing(){
            $this->ring=&#39;10000&#39;;
            $this->car=&#39;100000&#39;;
            $this->house=&#39;1000000&#39;;
        }
        public function jiehun() {
            if($this->ring && $this->car && $this->house)
                        echo &#39;我可以结婚了<br>&#39;;
                    else
                        echo &#39;我是臭屌丝,还不能结婚<br>&#39;;
        }
    }
    class women implements people {
        public $face=&#39;ugly&#39;;
        public function getAllthing(){
            $this->face=&#39;nice&#39;;
        }
          public function jiehun() {
                    if($this->face ==&#39;nice&#39;)
                        echo &#39;我可以结婚了<br>&#39;;
                    else
                        echo &#39;我是臭屌丝,还不能结婚<br>&#39;;
            }
    }
    interface  createpeople { 
        // 注意了,这里是工厂模式本质区别所在,将对象的创建抽象成一个接口。
          public function create();
    }
    class FactoryMan implements createpeople{
          public  function create() {
                    return  new man;
            }
    }
    class FactoryWomen implements createpeople {
           public function create() {
                    return new women;
            }
    }
    class  Client {
        // 简单工厂里的静态方法
            public function test() {
                $Factory =  new  FactoryMan;
                $man = $Factory->create();
                $man->jiehun();
                $Factory =  new  FactoryWomen;
                $woman = $Factory->create();
                $woman->getAllthing();
                $woman->jiehun();
            }
    }
/////////////test////////////
    $f = new Client;
    $f->test();
//抽象模式就是在工厂模式下接口中添加相应的不同方法即可
?>

Strategiemuster (Strategiemuster)

Strategiemuster ist das Verhaltensmuster eines Objekts, das für Folgendes bestimmt ist eine Reihe von Algorithmen zur Kapselung. Wählen Sie dynamisch den erforderlichen Algorithmus aus und verwenden Sie ihn.
Strategiemuster bezieht sich auf ein Muster, das die Entscheidungskontrolle im Programm beinhaltet. Das Strategiemuster ist sehr leistungsfähig, da die Kernidee dieses Entwurfsmusters selbst die polymorphe Idee der objektorientierten Programmierung ist.
Drei Merkmale des Strategiemusters:

Abstrakte Rollenklassen definieren (allgemeine abstrakte Methoden für jede Implementierung definieren)

Spezifische Strategieklassen definieren (allgemeine Methoden der übergeordneten Klassen konkret implementieren)

Umgebungsrollenklasse definieren (abstrakte Rollenvariablen privat deklarieren, Konstruktionsmethoden überladen, abstrakte Methoden ausführen)

<?php
abstract class baseAgent { //抽象策略类
        abstract function PrintPage();
    }
    //用于客户端是IE时调用的类(环境角色)
    class ieAgent extends baseAgent {
        function PrintPage() {
            return &#39;IE&#39;;
        }
    }
    //用于客户端不是IE时调用的类(环境角色)
    class otherAgent extends baseAgent {
        function PrintPage() {
            return &#39;not IE&#39;;
        }
    }
    class Browser {
    //具体策略角色
        public function call($object) {
            return $object->PrintPage ();
        }
    }
///////////////test////////////////
    $bro = new Browser ();
    echo $bro->call (new ieAgent );

Verwandte Empfehlungen:

PHP-Entwurfsmuster Gemeinsame Nutzung der Kombination Muster und Fälle

Teilen gängiger PHP-Entwurfsmuster

Einführung in häufig verwendete Entwurfsmuster in PHP und deren Verwendungsbeispiele

Das obige ist der detaillierte Inhalt vonEinfache praktische Beispiele verschiedener PHP-Designmuster. 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