PHP-Entwurfsmuster 2: Factory-Modus, Singleton-Modus, Registrierungsbaummodus

不言
Freigeben: 2023-03-23 18:36:02
Original
1294 Leute haben es durchsucht

Der Inhalt dieses Artikels ist PHP-Designmuster 2: Factory-Modus, Singleton-Modus, Registrierungsbaummodus. Jetzt können Freunde in Not darauf verweisen

Fabrik Muster: Generieren Sie Objekte in Factory-Methoden oder Klassen statt direkt neu im Code
Vorteile: Wenn eine gemeinsame Klasse an mehreren Stellen neue benötigt, verwenden Sie das Factory-Muster, um die Erweiterung und Wartung der Klasse zu erleichtern
Dateiverzeichnis: Frame/Factory.php

<?php
namespace Frame;
use Frame\Database;
use Frame\Register;

class Factory
{
    static function createDatabase()
    {
        //$db = new Database(); //正常实例化类
        $db = Database::getInstance();    //获取单例模式的类
        Register::set(&#39;db&#39;,$db);          //将实例化后的类注册到全局注册树中
        return $db;
    }
}
//外部调用得到$db对象
$db = Frame\Factory::createDatabase();
//获取全局注册树中的对象
$db = Frame\Register::get(&#39;db&#39;);
//卸载全局注册树中的对象
$db = Frame\Register::_unset(&#39;db&#39;);
?>
Nach dem Login kopieren

2. Singleton-Modus: Nur neue Instanziierung von Objekten innerhalb der Klasse selbst erlaubt
Vorteile: Die Klasse kann extern nicht neu sein , und das Objekt wird einmal in der Klasse selbst erstellt, wodurch Ressourcenaufwand gespart wird.
Dateiverzeichnis: Frame/Database.php

<?php
namespace Frame;

class Database
{
    protected $db;
    
    //单例模式,私有化__construct()方法,不允许外部实例化对象
    private function __construct()
    {
    }
    //实例化本类
    static function getInstance()
    {
        if(self::$db) {
            return self::$db;
        } else {
            self::$db = new self();
            return self::$db;
        }
    }
}
//外部调用
$db = Frame\Database::getInstance();
?>
Nach dem Login kopieren

3. Registrierungsbaummodus: Registrieren Sie ein Objekt im globalen Verzeichnis Registrierungsbaum für einfache globale Nutzung
Speicherverzeichnis: Frame/Register.php

<?php
namespace Frame;

class Register
{
    protected $objects;
    /*
    *    将实例化后的类注册到全局注册树中
    *    $alias :对象别名
    *    $object:实例化后的对象
    */
    static function set($alias,$object)
    {
        self::$objects[$alias] = $object;
    }
    /*
    *    卸载实例化后的类
    *    $alias :对象别名
    */
    static function _unset($alias)
    {
        unset(self::$objects[$alias]);
    }
    /*
    *    获取实例化后的类对象
    *    $alias : 对象别名
    */
    static function get($alias)
    {
        return self::$objects[$alias];
    }
    
}
?>
Nach dem Login kopieren

Verwandte Empfehlungen:

PHP-Designmuster, ein Namespace, automatisches Laden von Klassen , PSR-0-Codierungsspezifikationen

Das obige ist der detaillierte Inhalt vonPHP-Entwurfsmuster 2: Factory-Modus, Singleton-Modus, Registrierungsbaummodus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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