php设计模式:工厂模式、单例模式、注册树模式

发布时间:2019-08-07 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php设计模式:工厂模式、单例模式、注册树模式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一、工厂模式:工厂方法或类中生成对象,而不是在代码中直接 new
优点:将某个常用类,多个地方需要 new 时,使用工厂模式,方便类的扩展与维护
文件目录:Frame/Factory.php

<?php
namespace Frame;
use FrameDatabase;
use FrameRegister;

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

二、单例模式:只允许在类的本身 new 实例化对象
优点:外部无法 new 该类,并且该对象在类本身创建一次,节约资开销
文件目录: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 = FrameDatabase::getInstance();
?>

三、注册树模式:将某个对象注册到全局注册树中,便于全局使用
存放目录: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];
    }
    
}
?>

脚本宝典总结

以上是脚本宝典为你收集整理的php设计模式:工厂模式、单例模式、注册树模式全部内容,希望文章能够帮你解决php设计模式:工厂模式、单例模式、注册树模式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。