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;
    

      

  • 相关阅读:
    Leetcode Reverse Words in a String
    topcoder SRM 619 DIV2 GoodCompanyDivTwo
    topcoder SRM 618 DIV2 MovingRooksDiv2
    topcoder SRM 618 DIV2 WritingWords
    topcoder SRM 618 DIV2 LongWordsDiv2
    Zepto Code Rush 2014 A. Feed with Candy
    Zepto Code Rush 2014 B
    Codeforces Round #245 (Div. 2) B
    Codeforces Round #245 (Div. 2) A
    Codeforces Round #247 (Div. 2) B
  • 原文地址:https://www.cnblogs.com/brady-wang/p/5545846.html
Copyright © 2011-2022 走看看