PHP设计模式之注册模式

摘要:
单例模式确保只全局访问一个类的一个实例。当您有一组全局访问的全局对象时,您可能需要使用注册器模式。它提供了一种以有序方式在程序中存储和管理对象的解决方案。“注册模式”应提供get()和set()方法来存储和获取对象,还应提供isValid()方法以确定是否已设置给定属性。注册模式通过单个全局对象1获取其他对象的引用实例://注册模式classRegistry{protectedstatic$store=array();privatestatic$instance;publicstaticfunctioninstance(){if(!isset){self::$instance=newself();}returnself::$instance;}publicfunctionisValid{returnarray_key_exists;}publicfunctionget{ifreturnRegistry::$store[$key];}publicfunctionset{Registry::$store[$key]=$obj;}}//数据库链接类classConnectDB{private$host;private$username;private$password;private$Connen;publicfunction__construct{$this-˃host=$host;$this-˃username=$username,$this-˃password=$password;}publicfunctiongetConnect(){returnmysql_connect;}}//使用测试$reg=Registry::instance()$reg-˃set;$reg-˃set;打印_ r;打印_ r;打印_ r;注册模式解决全局共享和对象交换。
单例模式保证了一个类中只有一个实例被全局访问,当你有一组全局对象被全局访问时可能就需要用到注册者模式 (registry),它提供了在程序中有条理的存放并管理对象 (object)一种解决方案。一个“注册模式”应该提供get() 和 set()方法来存储和取得对象(用一些属性key)而且也应该提供一个isValid()方法来确定一个给定的属性是否已经设置。 注册模式通过单一的全局的对象来获取对其它对象的引用
实例 1:
//注册模式
class  Registry  {

    protected   static  $store  =  array();
    private     static  $instance;

    public static function instance() {
        if(!isset(self::$instance)) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function  isValid($key)  {
        return  array_key_exists($key,Registry::$store);
    }

    public function  get($key)  {
        if  (array_key_exists($key,Registry::$store))
            return  Registry::$store[$key];
    }

    public  function  set($key,  $obj)  {
        Registry::$store[$key]  =  $obj;
    }
}

//数据库链接类
class ConnectDB {

    private $host;
    private $username;
    private $password;

    private $conn;

    public function __construct($host, $username, $password){
        $this->host = $host;
        $this->username = $username;
        $this->password = $password;
    }

    public function getConnect() {
        return mysql_connect($this->host,$this->username,$this->password);
    }

}

//使用测试
$reg = Registry::instance();
$reg->set('db1', new ConnectDB('localhost', 'root', '123456'));
$reg->set('db2', new ConnectDB('192.168.1.198', 'test', '0K5Dt@2jdc8#x@'));

print_r("<pre>");
print_r($reg->get('db1'));
print_r($reg->get('db2'));

注册模式,解决全局共享和交换对象。已经创建好的对象,挂在到某个全局可以使用的数组上,在需要使用的时候,直接从该数组上获取即可。将对象注册到全局的树上。任何地方直接去访问。

实例2:

class Register
{
     //定义全局属性
     protected static $objects;

     //将对象注册到全局的树上
     function set($alias,$object)
     {
         //将对象放到树上
         self::$objects[$alias]=$object;
     }

     static function get($name){
         //获取某个注册到树上的对象
         return self::$objects[$name];
     }

     function _unset($alias)
     {
         //移除某个注册到树上的对象。
         unset(self::$objects[$alias]);
     }
}

  

免责声明:文章转载自《PHP设计模式之注册模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue安装及升级转OSGchina中,array老大的名词解释下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

docker 部署nginx、php-fpm

假设机器上已经安装好docker环境 一.运行nginx容器 1.查找Docker Hub 上的nginx 镜像 runoob@runoob:~/nginx$ docker search nginx NAME DESCRIPTION STARS...

C++ STL hash表用法

C++ STL unordered_map用法 在C++11中,unordered_map作为一种关联容器,替代了hash_map,unordered_map的底层实现是hash表,所以被称为无序关联容器。不管是map还是unordered_map都是一种 key-map(value) 映射的容器,提供非常高的查找效率,下面我们来了解unordered_m...

小谢第29问:Vue项目打包部署到服务器上,调接口就报js,css 文件404

1、publicPath路径的问题,先看下build之后的包确认下是不是publicPath路径配置的原因,有没有static这个文件夹,以及这个文件夹下边有没有这些404的js和css 2、history模式需要配置nginx支持 3、在dev环境下测试没有问题,但是npm run build后图片的路径找不到,对于图片路径的设置,只可以有以下三种方式...

在Mac OS X下使用Apache、PHP、MySQL、Netbeans、Yii

本文环境: Mac OS X:10.8.4 Apache:2.2.22 PHP:5.3.15 Netbeans:7.3.1 Yii:1.1.14   Mac OS X是内置了Apache服务器的,不过默认没有启动。之前的版本有两种方式启动Apache,到了Mac OS X 10.8似乎只能用命令行的方式启动了。10.8.4版本中的Apache是2.2.22...

PHP将秒数转换成时分秒

/** * 将秒数转换成时分秒 * * @param 秒数 $seconds * @return void */ function changeTimeType($seconds) { if ($seconds > 3600) { $hours = intval($seconds / 3600); $...

Android 系统属性-SystemProperties详解***

  创建与修改android属性用Systemproperties.set(name, value),获取android属性用Systemproperties.get(name),需要注意的是android属性的名称是有一定的格式要求的:   如下:1.前缀必须用systemcoreinitproperty_service.c中定义的前缀。 2. 进行系...