zoukankan      html  css  js  c++  java
  • 关于单例模式的一些理解

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

    首先:什么是单例模式?

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

    单例模式的核心是什么?

      核心就是三私一公;

      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了

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

    努力,奋斗,积累,只为遇见更好的自己!
  • 相关阅读:
    Reverse Linked List
    Sqrt(x)
    Convert Sorted Array to Binary Search Tree
    Remove Linked List Elements
    Happy Number
    Length of Last Word
    Pow(x, n)
    Rotate Image
    Permutations
    Integer to Roman
  • 原文地址:https://www.cnblogs.com/misslove/p/7250377.html
Copyright © 2011-2022 走看看