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

    PHP单例模式,就是一个对象只被生成一次,但该对象可以被其它众多对象使用。单例模式使用最多的场景,是数据库连接操作。我们知道,生成一个对象的操作是用new函数来实现,但是new对象都会消耗内存,而且有时候对同一个对象,在不同文件中可能会生成多次,这就造成了系统资源的浪费。然而使用单例模式,则可以很好的避免这种情况。

    以数据库为例,假设我们有一个数据库的类,要实现数据库连接。如果不使用单例模式,那么在很多PHP文件中,我们可能到要创建这样的一个连接,这其实是对资源的很大浪费。那么下面介绍单例模式实现方法:

    <?php
    
    class Database
    {
        protected static $db;
        private function __construct()
        {
    
        }
        static public function getInstace(){
            if(self::$db){
                return self::$db;
            }else{
                self::$db = new self();
                return self::$db;
            }
        }
    }
    //错误调用方法
    //用new实例化private标记构造函数的类会报错
    $db = new Database();
    
    //正确获取实例方法
    $db = Database::getInstace();

    使用单例模式的好处是,当你在其他地方也要使用到这个类,比如上面的数据库类。那么你可以在其它地方直接调用 Database::getInstace(),而且该实例只会被生成一次,不会被重复生成,所以不会浪费系统资源。

    简单的说,单例模式生成的实例只被生成一次,而且只负责一个特定的任务。

    使用单例模式有下面几个要求:

    1.构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;

    2.拥有一个保存类的实例的静态成员变量;

    3.拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化);

    4.如果严谨的话,还需要创建__clone()方法防止对象被复制(克隆)。(我上面没创建)

  • 相关阅读:
    布局重用 include merge ViewStub
    AS 常用插件 MD
    AS 2.0新功能 Instant Run
    AS .ignore插件 忽略文件
    AS Gradle构建工具与Android plugin插件【大全】
    如何开通www国际域名个人网站
    倒计时实现方案总结 Timer Handler
    AS 进行单元测试
    RxJava 设计理念 观察者模式 Observable lambdas MD
    retrofit okhttp RxJava bk Gson Lambda 综合示例【配置】
  • 原文地址:https://www.cnblogs.com/zhouguowei/p/9262478.html
Copyright © 2011-2022 走看看