抽丝剥茧设计模式 -------- 单例模式(Singleton)

一、基础【创建型模式】

        1、定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

           【通俗易懂:有一个class,你无法保证别的人会在其他的控制器里new 这个类,所以要保证这个类是私有的,别人在其他的控制器是无法new这个类的】

            这种模式涉及到单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 

        2、主要解决:一个全局使用的类频繁的创建与销毁;

        3、何时使用?:当想控制实例数目,节省资源的时候;

        4、特点:构造器必须是私有的,外部类无法通过调用构造器方法创建该实例;

                         需要提供一个公开的方法来获取这个唯一的实例;

        5、优点:某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销;

                         new是很耗资源的操作,省去了NEW 操作符,降低了系统内存的使用频率,减轻GC(垃圾回收机制)压力;

                         避免了对资源的重复占用;

               缺点:没有接口,不能继承;

        6、分类

               懒汉式:当第一次访问单例模式时才进行创建;什么时候用什么时候初始化;

               饿汉式直接在最开始的时候直接创建;不管用不用都直接创建;

相对于java的单利模式有8中写法,php的单利模式就是太简单了。可以说没有饿汉式。

还是要会手写单例模式^^^^^    哪怕为了面试呢

<?php

class Singleton{

    //私有属性,用于保存实例
    private static $instance;

    //构造方法私有化,防止外部创建实例
    private function __construct(){}

    //公有属性,用于测试
    public $a;
    //公有方法,用于获取实例
    public static function getInstance(){
        //判断实例有无创建,没有的话创建实例并返回,有的话直接返回
        if(!(self::$instance instanceof self)){
            self::$instance = new self();
        }
        return self::$instance;
    }
    //克隆方法私有化,防止复制实例
    private function __clone(){}

}

$sing = Singleton::getInstance();
$sing->test();

             

懒汉式和饿汉式对比后的应用场景:

如果某个数据是经常访问的热点数据,那我们可以在系统启动的时候使用饿汉模式提前加载,这样哪怕是第一个用户调用都不会创建,而且调用频繁也不会存在内存浪费了;

如果数据一段时间内不会经常有人调用,那就用懒汉;如果你使用的是饿汉式,过了好几个月还没调用,提前加载的类在内存中是有资源浪费的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值