• 单例模式


    单例模式

    - 能够保证一个类只有一个实例 并提供一个访问该实例的全局节点

    - 一个类只能有一个实例且该实例只能自己创建。

     1 <?php
     2 class Singleton
     3 {
     4     //添加私有静态成员变量用于保存单例实例
     5     private static $instance;
     6 
     7     //申明公有静态方法用于获取单例实例
     8     public static function getInstance()
     9     {
    10         if (empty(self::$instance)) self::$instance = new self();
    11 
    12         return self::$instance;
    13     }
    14 
    15     //私有默认构造方法,保证外界无法直接实例化
    16     private function __construct()
    17     {
    18     }
    19 
    20     //防止用户克隆实例
    21     public function __clone()
    22     {
    23         die('clone is not allow');
    24     }
    25 
    26     public function test()
    27     {
    28         echo 'Singleton test is success';
    29     }
    30 }

    - 使用场景

    1、想控制实例数目,节省系统资源的时候。如数据库连接、类方法封装(方法不使用关键字 static,通过 $instance 来调用不同方法)

    2、需要更加严格地控制全局变量 可以使用单例模式

    - 优点

    1、在内存里只有一个实例,仅在首次请求单例对象时对其进行初始化,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。

    2、避免对资源的多重占用(比如写文件操作)。

    3、获得了一个指向该实例的全局访问节点

    - 缺点

    1、没有接口,无法继承。

    2、该模式在多线程环境下需要进行特殊处理 避免多个线程多次创建单例对象

    3、违反单一职责原则。

  • 相关阅读:
    中国剩余定理
    hdu1808-Halloween treats(抽屉原理)
    快速幂算法
    因子和与因子个数
    乘性函数
    HDU 2669 Romantic (扩展欧几里得定理)
    扩展欧几里得算法
    Bi-shoe and Phi-shoe(欧拉函数)
    欧拉函数
    [51nod]1284 2 3 5 7的倍数(容斥原理)
  • 原文地址:https://www.cnblogs.com/suojian/p/13941016.html
Copyright © 2020-2023  润新知