PHP中的设计模式

工厂模式

工厂模式(Factory)允许你在代码执行时,动态地创建不同的对象。它之所以被称为工厂模式是因为它负责“生产”对象。工厂方法的参数是你要创建的对象所对应的类名称。

<?php
class Example {
    public static function factory($type) // 工厂方法 {
        if (include_once 'Drivers/' . $type . '.php') {  // 加载对应的类文件
            $classname = 'Driver_' . $type;
            return new $classname;   // 返回创建的对象
        } else {
            throw new Exception ('Driver not found');
        }
    }
}
?>

上面的方式可以动态加载数据库驱动类。如果Example类是一个数据库抽象类,那么,可以这样来生成 MySQL 和 SQLite 驱动对象。

<?php
// Load a MySQL Driver
$mysql = Example::factory('MySQL');

// Load a SQLite Driver
$sqlite = Example::factory('SQLite');
?>

单例模式

单例模式用于为一个类生成一个唯一的对象,程序运行过程中,只能有一个对象存在。(如:数据库操作类)

单例模式的特点:

  • 构造方法私有化,防止在类外部直接创建对象。
  • 必须要产生一个对象,使用静态方法,在方法内部实例化对象,且保存到静态属性中。
  • 魔术方法__clone()私有化,防止用户复制(克隆)对象实例。

单例模式的优点:

  • 内存中只会存在一个对象,因此,单例模式可以节省系统资源。对于一些需要经常创建和销毁的对象,单例模式无疑可以提高系统的性能。
  • 单例模式提供的对象是固定的,只允许通过一种途径来实例化对象,便于对象的控制和共享。
<?php
class Test{ 
    // 在静态属性中保存类实例
    private static $instance;

    // 构造方法私有化,防止在类外部直接创建对象
    private function __construct(){}

    // 魔术方法__clone()私有化,防止用户复制(克隆)对象实例
    private function __clone(){}

    /** * 获取单例 */
    public static function getInstance(){
        if(!isset(self::$instance)){
            // 在类内部实例化对象
            $instance = new Test();    // 或 $instance = new __CLASS__;
            self::$instance = $instance;
        }
        return self::$instance;
    }   
}
?>

<?php 
$obj = Test::getInstance();
var_dump($obj);
?>
    原文作者:lamp_yang_3533
    原文地址: https://blog.csdn.net/lamp_yang_3533/article/details/53044985
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞