关于单例模式的一些理解

单例模式作为设计模式中的常见模式,比较重要。个人有感写了一些东西,助于自己理解单例模式。

首先:什么是单例模式?

  单例模式视为了避免重复生成同一个实例对象,而产生的一种模式。因为对象在内存中占据空间较大,相比而言,我们更希望对于相同的对象,不必要每次都新建同样的对象。多个变量指向同一个对象。这样可以节省内存开销。

单例模式的核心是什么?

  核心就是三私一公;

  1、私有化的构造方法

  2、私有化的克隆方法

  3、私有化的静态变量

  4、公共的静态方法

  为什么要设置这三私一公呢?

  1、私有化的构造方法是为了避免在类外使用 new class  来创建对象实体,我们只允许使用我们设定好的公共方法来建立实例。

  2、私有化的克隆方法是为了避免在使用公共方法获取实例后,再通过clone的方法将对象实体克隆出新的对象(这就不再是单一对象了)

  3、私有化的静态变量,用于存储类的实例化对象,至于为什么要是私有化静态的,我在例子中会详细介绍

  4、公共的静态方法,用于存储实例化的对象,供外界获取

  

class only_ins
{
    //私有化的静态变量
    private static $obj = null;

    //私有化克隆方法
    private function __clone()
    {
    }

    // 私有化构造方法
    private function __construct()
    {
    }

    //公共的静态方法
    public static function get_obj()
    {
        if (self::$obj == null) self::$obj = new self();
        return self::$obj;
    }

    //$obj作为容器存储实例,为什么要设为静态属性呢?因为外部只能通过静态方法实例化对象;
    //而存储容器又是在静态方法中被调用的,所以必须是静态的属性
    //那为什么要设为私有变量呢?  个人想法 如果是共有的,那么外部就可以进行访问,从而
    //可以修改此变量,那么就无法保证你下次获取到的还是此类的对象了,
    //比如直接调用并胡乱修改$obj的值
    //  only_ins::$obj = 121
    //  那么下次再调用静态公共方法获取到的就不再是类的对象,而是数字121了

以上就是个人的一点关于单例模式的一些见解,如有不足,请见谅

努力,奋斗,积累,只为遇见更好的自己!
原文地址:https://www.cnblogs.com/misslove/p/7250377.html