zoukankan      html  css  js  c++  java
  • 单例模式

    /**
    * 设计模式之单例模式
    * $_instance必须声明为静态的私有变量
    * 构造函数必须声明为私有,防止外部程序new类从而失去单例模式的意义
    * getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用
    * ::操作符只能访问静态变量和静态函数
    * new对象都会消耗内存
    * 使用场景:最常用的地方是数据库连接。
    * 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。
    */
    class man
    {
    //保存例实例在此属性中
    private static $_instance;
    
    //构造函数声明为private,防止直接创建对象
    private function __construct()
    {
    echo '我被实例化了!';
    }
    
    //单例方法
    public static function get_instance()
    {
    var_dump(isset(self::$_instance));
    
    if(!isset(self::$_instance))
    {
    self::$_instance=new self();
    }
    return self::$_instance;
    }
    
    //阻止用户复制对象实例
    private function __clone()
    {
    trigger_error('Clone is not allow' ,E_USER_ERROR);
    }
    
    function test()
    {
    echo("test");
    
    }
    }
    
    // 这个写法会出错,因为构造方法被声明为private
    //$test = new man;
    
    // 下面将得到Example类的单例对象
    $test = man::get_instance();
    $test = man::get_instance();
    $test->test();
    
    // 复制对象将导致一个E_USER_ERROR.
    //$test_clone = clone $test;
    

      

  • 相关阅读:
    写在之前
    Fedora Core 3安装杂记(三)
    Fedora Core 3安装杂记(一)
    Firefox 1.0真的挺好用的
    发现Google加了英文页面翻译功能(Beta)
    Fedora Core 3安装杂记(四)
    在FC3的日子里……
    ASP面向对象编程探讨及比较
    显卡千万不能买带风扇的……
    字符串(strcat)
  • 原文地址:https://www.cnblogs.com/brady-wang/p/5545846.html
Copyright © 2011-2022 走看看