《php面向对象》 第13课:单例模式

单例模式,就是指一个类只有一个对象实例。这样做的好处,可以防止频繁创建对象而造成资源浪费。

设计单例模式,需要注意以下几点:

  1. 一个类只能有一个对象;
  2. 必须是自行创建这个类的对象;
  3. 要向整个系统提供这一个对象;

封装单例模式的类时,需做到以点几点:

  1. 只提供私有的构造函数,
  2. 含有一个该类的静态私有对象,
  3. 提供一个静态的公有的函数用于创建或获取它本身的静态私有对象。
  4. 有一个private的clone方法,防止克隆;

说到底,设计单例模式,需要有静态成员。下面我们来看一个实例:

<?php

//单例
class Uni
{
    //创建静态私有的变量保存该类对象
    static private $instance;

    //构造方法是私有,防止外部直接创建对象
    private function __construct()
    {
    }

    //防止克隆对象
    private function __clone()
    {

    }

    static public function getInstance()
    {
        //判断$instance是否是Uni的对象
        //没有则创建
        //注意instanceof的使用
        if (!self::$instance instanceof self) {
            self::$instance = new self();  //在类中实例化本类的对象,使用self
        }
        return self::$instance;

    }

    //普通方法
    public function method()
    {
        echo '正常执行对象中的方法';
    }
}

$ob1 = Uni::getInstance(); //获取uni的对象
$ob1->method();
echo "<br>";

$ob2 = Uni::getInstance();
$ob2->method();
echo "<br>";

if ($ob1 === $ob2) {
    echo 'obj和ob2是同一个对象';
} else {
    echo 'obj和ob2不是同一个对象';
}

运行结果如下 :

如果不使用单例模式,那么ob1和ob2就是两个对象

<?php

class Book
{
    public function method()
    {
        echo '正在执行方法<br>';
    }
}

$b1 = new Book();
$b1->method();
$b2 = new Book();
$b2->method();
if ($b1 === $b2) {
    echo 'b1和b2是同一对象';
} else {
    echo 'b1和b2是两个对象';
}

运行结果如下:

在类的外部,实例化对象的个数是无法控制的。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李 书 明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值