php实现三种基本的设计模式--单例,工厂,注册

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

单例模式:确保创建的是唯一的实例

核心思想就是不能通过在类外new新建一个实例,通过instance,来创建实例,在创建时先判断是否存在,如果存在则返回当前实例,不存在即返回一个新建的实例,我们看一下PHP的实现

代码

<?PHP
class test{
    PRivate static $instance;
    private function __construct()
    {

    }
    public static function get_instance(){
        if(self::$instance==null){
            self::$instance=new test();
        }
        return self::$instance;
    }
}
$a=test::get_instance();
$b=test::get_instance();
if($a==$b){
    echo "这是一个对象哦";
}
C:\wamp64\bin\PHP\PHP7.0.10\PHP.exe C:\wamp64\www\api\test.PHP
这是一个对象哦
Process finished wITh exit code 0

需要注意的几点:构造函数必须是私有的,才能保证不能类外new一个实例,有一个静态私有变量储存实例,每次创建的时候就判断它是否为空就知道是否已经创建了,所以上面创建两次,其实是一个,这就是单例模式。

工厂模式:

工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,虽然工厂方法可以任意命名这个静态还可以接受任意数据的参数,必须返回一个对象。

大概我的理解就是所需要的实例都可以通过工厂进行创造,我们给工厂我们想要的对象名,他给我返回一个实体,然后我们就可以正常使用。我们通过代码理解一下
代码

<?PHP
class test{
    private static $instance;
    private function __construct()
    {

    }
    public static function get_instance(){
        if(self::$instance==null){
            self::$instance=new test();
        }
        return self::$instance;
    }
}
class Factor{

    public static function createoj($classname){
        $oj=$classname::get_instance();
        return $oj;
    }
}

$a=Factor::createoj('test');
var_dump($a);
C:\wamp64\bin\PHP\PHP7.0.10\PHP.exe C:\wamp64\www\api\test.PHP
object(test)#1 (0) {
}

Process finished with exit code 0

这是简单的实现,结合上个单例模式,定义了工厂类后,把要的对象传给他,让他去创建实例,并返回给我们。

注册树模式

把所有注册过的对象都存储起来,有用的时候直接通过get方法一个出来

代码

<?PHP
class test{
    private static $instance;
    public $a=1;
    private function __construct()
    {

    }
    public static function get_instance(){
        if(self::$instance==null){
            self::$instance=new test();
        }
        return self::$instance;
    }
}
class Factory{

    public static function createoj($classname){
        $oj=$classname::get_instance();
        return $oj;
    }
}
class Register{
    protected static $objects;
    public static function set($alias,$object){
        self::$objects[$alias]=$object;
    }
    public static function get($alias){
        return self::$objects[$alias];
    }
    public static function _unset($alias){
        unset(self::$objects[$alias]);
    }
}

Register::set('rand',Factory::createoj('test'));

$object=Register::get('rand');

print_r($object);
C:\wamp64\bin\PHP\PHP7.0.10\PHP.exe C:\wamp64\www\api\test.PHP
test Object
(
    [a] => 1
)

Process finished with exit code 0

我特意加了一个public变量,让大家理解的更明白一些,其中rand就是储存在注册树中的键名

脚本宝典总结

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

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

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