现在的位置: 首页 > 综合 > 正文

【读书笔记-重构与模式】 单例模式

2013年09月03日 ⁄ 综合 ⁄ 共 848字 ⁄ 字号 评论关闭

《深入php面向对象,模式与实践》中指出:全局变量是面向对象程序员遇到的引发bug的主要原因之一,这是因为全局变量将类捆绑在特定的环境中,破坏了封装。然而,为了能够使所有类够能够访问到某个对象,会不惜忍受全局访问的缺陷。

总结来说,不使用全局变量,又想要使得每个类都能访问到对象。问题的关键点即:

   1.对象应该被系统中的任何对象使用。

   2.对象不应该被存储在会被复写的全局变量中。

   3.系统中不应该出现超过一个的该变量。

为了解决这个方案,可以使用单例模式。

单例模式的实现思想是:将类的构造函数设置为private权限,同时采用一个静态方法和静态属性来间接实例化对象。

class  singleton{
    private static $instance = NULL;
    private  $props = array();
    private function __construct(){
    }

    public static function getInstance(){
        if(empty(SELF::$instance)){
            SELF::$instance = new SELF(); 
        }
        return  self::$instance;
    }
      
    public function setProp($prop,$value){
        $this->props[$prop] = $value;
    }
    public function getProp($prop){
        return $this->props[$prop];
    }
    
    private function __set($prop,$value){
        //省略之
    }
    private function __get(){
        //省略
    }

    private  function __clone(){
       //省略
    }
}

单例模式的UML图示如下:

抱歉!评论已关闭.