• 1 单例设计模式


    单例模式是指整个应用中类只有一个对象实例的设计模式。

    使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。

    私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。

    每次用 new 类名 的方式,就可以创建一个对象。我们必须禁止外部程序用 new 类名的方式来创建多个实例。

    解决办法是:我们将构造函数设置成 private ,让构造函数只能在内部被调用,而外部不能调用。这样,这个类就不能被外部用 new 的方式建立多个实例了。

    经典的设计模式主要有2种:懒汉式和饿汉式。下面分别展示代码。

    懒汉式:

    懒汉式单例模式既在需要的时候才创建单例对象,即“用时间换空间”。

    //懒汉式
    class Single {
        static private $instance = null;//声明一个静态变量(保存在类中唯一的一个实例)
        private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
    
        }
    
        static public function getInstance(){//声明一个getInstance()静态方法,用于检测是否有实例对象
            if(self::$instance == null) {
                self::$instance = new self();
            }
            return self::$instance;
        }
    }
    $instance = Single::getInstance();//得到实例

    饿汉式:

    饿汉式的特点是一开始就创建实例,即“用空间换时间”

    php有一个特性,不支持在类定义时给类的成员变量赋予非基本类型的值。如表达式,new操作等等。故我目前还无法实现php的饿汉式单例。下面用Java实现一下:

    //饿汉式单例模式
    public class Single2 {
        //设立静态变量,直接创建实例
        private static Single2 Single = new Single2();
     
        private Singlet2(){
            //私有化构造函数
    
        }
        
        //开放一个公有方法,返回实例
        public static Single2 getInstance(){
            return Single;
        }
    }
  • 相关阅读:
    Qt初始化窗口大小
    Ignatius's puzzle(数学)
    无法定位程序输入点_Z5qFreePv于动态链接库QtCore4.dll
    Harmonic Number(打表法)
    Codeforces Round #170 (Div. 2) C. Learning Languages(并查集)
    Codeforces Round #174 (Div. 2) B. Cows and Poker Game(简单)
    Codeforces Round #175 (Div. 2) B. Find Marble(简单模拟)
    错误:no matching function for call to 'Ui_***::retranslateUi()'
    最大流EK算法模板(BFS实现)
    Shaking Your Cellphone(并查集)
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10540107.html
Copyright © 2020-2023  润新知