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);
?>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值