PHP中的设计模式

来源:互联网 发布:js定时执行 编辑:程序博客网 时间:2024/05/19 12:38

1. 工厂模式

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

<?phpclass 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');?>

2. 单例模式

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

单例模式的特点:

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