zoukankan      html  css  js  c++  java
  • PHP设计模式-单例模式

    1、前言

    单例模式有3个特点:

    • 私有静态属性,又来储存生成的唯一对象
    • 私有构造函数
    • 公共静态方法,用来访问静态属性储存的对象,如果没有对象,则生成此单例
    • 私有克隆函数,防止克隆——clone(这个不是特点,只是出于安全)

    那么为什么使用单例模式:

           PHP一个主要应用场合就是应用程序与数据库打交道的场景,避免每一次 NEW 操作消耗系统和内存的资源。

    2、代码实现

    class Singleton {
        /**
        * 静态成品变量 保存全局实例
        */
        private static $_instance = NULL;
        /**
        * 私有化默认构造方法,保证外界无法直接实例化
        */
        private function __construct() {
    
        }
        /**
        * 静态工厂方法,返还此类的唯一实例
        */
        public static function getInstance() {
            if (!self::$_instance instanceof Singleton) {
                self::$_instance = new Singleton();
            }
            return self::$_instance;
        }
        /**
        * 防止用户克隆实例
        */
        private function __clone(){
            die('Clone is not allowed.' . E_USER_ERROR);
        }
    }

    回归主题:如何确保只有一个呢?=》这个类只加载一次=》静态属性或方法

    本例中使用self::$_instance instanceof Singleton 来判断实例化的 $_instance 是否属于 Singleton,确保只创建一个实例对象。

    3、总结

    主要优点:

    • 提供了对唯一实例的受控访问。
    • 由于内存中只存在一个实例化对象,因此可以节约内存资源。(对应需要频繁实例化的对象可以避免资源的浪费)
    主要缺点:
    • 由于单利模式中没有抽象层,扩展难
    • 单例类的职责过重,毕竟管太多(违背“单一职责原则”)。
    • 滥用单例将带来一些负面问题(高并发的连接池溢出,实例化对象长期不被使用)。
  • 相关阅读:
    asp.net core文件上传与下载
    asp.net Core1.1版本生成超链接/a链接标签的方式
    CentOS 7.2 64位上装mysql
    CentOS7 yum 安装 Nginx最新版本
    Mysql Mariadb 密码问题
    关闭selinux
    OTRS
    CentOS查看一共安装了多少软件包,是那些软件包
    CentOS删除安装的程序
    centos7 上安装mysql5.7后登录报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Yes 或者No)
  • 原文地址:https://www.cnblogs.com/ImCehnyx/p/7486789.html
Copyright © 2011-2022 走看看