工厂模式

工厂方法或类生成对象,而不是在代码中直接new
工厂方法的好处是统一生成对象,当以后生成对象变更时,只需要更改工厂类的方法即可

//Database.php 数据库类
<?php

namespace App;

class Database
{
    
}

//Factory.php 工厂类
<?php

namespace App;

class Factory
{
    static function createDatabase()
    {
        $db = new Database();
        return $bd;
    }
}

//index.php 调用示例
<?php

$db = \App\Factory::createDatabase();

单例模式

使某个类的对象仅允许被创建一次

//Database.php 单例数据库类
<?php

namespace App;

class Database
{
    protected $db;

    //禁止直接new对象
    private function __construct()
    {

    }

    static function getInstance()
    {
        if ($db) {
            return self::$db;
        }
        $db = new self();

        return $db;
    }

}


//index.php 调用示例
<?php

$db = \App\Database::getInstance();

注册模式

全局共享和交换对象

//Register.php 注册类
<?php

namespace App;

class Register
{
    protected static $objects;

    static set($alias, $object)
    {
        self::$objects[$alias] = $object;
    }

    static get($alias)
    {
        return self::$objects[$alias];
    }

    //unset为系统关键字
    static _unset($alias)
    {
        unset(self::$objects[$alias]);
    }
}


//index.php 调用示例
<?php

$db = \App\Database::getInstance();

\App\Register::set('db', $db);

$db = \App\Register::get('db');

以上三种是基本的设计模式,在使用过程中一般会结合其它设计模式使用。

简单示例:

//Factory.php 工厂类
<?php

namespace App;

class Factory
{
    static function createDatabase()
    {
        $db = Database::getInstance();
        return $bd;
    }
}

//index.php 调用示例,结合了单例、工厂和注册模式
<?php

$db = \App\Factory::createDatabase();

\App\Register::set('db', $db);

$db = \App\Register::get('db');

设计模式

登陆发表评论