PHP设计模式的实现

mac2024-04-19  34

单例模式

单例模式,是一种常见的软件设计模式。在它的核心结构中包含一个被称为特殊的单例。通过单例模式可以保证系统中一个类只有一个实例,即一个类只有一个对象实例。

实现单例模式
拥有一个构造函数并且为 private ,也就是不能new,不能clone一个静态变量,保存类中的唯一实例一个公共可访问的静态方法 <?php /** * 单例模式 */ Class singleton { /** * 一个静态变量,保存类中的唯一实例 * @var null */ static public $instance = null; /** * 一个构造函数并且为 private ,也就是不能new,不能clone */ private function __construct() { } /** *@return object */ public static function getInstance() { if(!self::$instance){ self::$instance = new singleton(); } return self::$instance; } }
使用
include "Singleton.class"; $singleton = Singleton::getInstance();//多次调也只会有一个实例 $ret = $singleton ->test();

注册树模式

注册树模式(Registry Pattern ):注册树模式为应用中经常使用的对象创建一个中央存储器来存放这些对象 —— 通常通过一个只包含静态方法的抽象类来实现(或者通过单例模式)。也叫做注册器模式

/** * 注册树模式 */ Class Registry { /** * 注册树池子(存放对象实例) * @var null */ protected static $objects = null; /** * 将对象挂到树上 * @param $key * @param $objects */ public function _set($key,$object) { self::$objects[$key] = $object; } /** * 获取树上的对象 * @param $key * @return mixed */ public function _get($key) { if(!isset(self::$objects[$key])){ self::$objects[$key] = new $key; } return self::$objects; } /** * 删除树上的对象实例 * @param $key */ public function _unset($key) { unset(self::$objects[$key]); } }
使用
//对象实例 $demo = new demo(); //挂到树上 $registry = \Registry::set('de',$demo); //取下对象 $getTree = \Registry::get('de'); //删除 $unset = \Registry::unset('de');
最新回复(0)