PHP设计模式中最基础的三种设计模式,工厂模式、单例模式、注册树模式
1. 单例模式
通过提供对自身共享实例的访问, 单例设计模式用于限制特定对象只能被创建一次。单例设计模式最常用于构建数据库连接对象
不管调用多少次singleton方法,都只会new一次
<?php
class Singleton
{
// 保存类实例在此属性中
private static $instance;
// 构造方法声明为private,防止直接创建对象
private function __construct()
{
echo 'I am constructed';
}
// singleton 方法
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// Example类中的普通方法
public function bark()
{
echo 'Woof!';
}
// 阻止用户复制对象实例
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}
?>
这样我们可以得到一个独一无二的Singleton类的对象。
<?php
// 这个写法会出错,因为构造方法被声明为private
$test = new Singleton;
// 下面将得到Example类的单例对象
$test = Singleton::singleton();
$test->bark();
// 复制对象将导致一个E_USER_ERROR.
$test_clone = clone $test;
?>
2. 工厂模式
工厂模式(Factory)允许你在代码执行时实例化对象。它之所以被称为工厂模式是因为它负责“生产”对象。工厂方法的参数是 你要生成的对象对应的类名称。
只需要new一次,如果new的对象名做了修改也只需要更改一个地方
<?php
class Example
{
// The parameterized factory method
public static function factory($type)
{
if (include_once 'Drivers/' . $type . '.php') {
$classname = 'Driver_' . $type;
return new $classname;
} else {
throw new Exception ('Driver not found');
}
}
}
?>
按上面的方式可以动态加载drivers。如果Example类是一个数据库抽象类,那么 可以这样来生成MySQL和 SQLite驱动对象:
<?php
// Load a MySQL Driver
$mysql = Example::factory('MySQL');
// Load a SQLite Driver
$sqlite = Example::factory('SQLite');
?>
3. 注册器模式
注册器模式也叫注册树模式,注册模式等
注册树模式通过将对象实例注册到一棵全局的对象树上,需要的时候从对象树上采摘的模式设计方法
<?php
/**
* 注册模式
*/
class Register{
protected status $objects;
static function set ($alias, $object)
{
self::$objects[$alias] = $object;
}
static function get($name)
{
return self::$objects[$name];
}
static function _unset($alias)
{
unset(self::$objects[$alias]);
}
}
龙魂无赦传奇私服官网:激情归来,独步江湖,一统天下!:https://501h.com/jingpin/15587.html
不错不错,我喜欢看 https://www.ea55.com/