单例模式

2020-02-12  本文已影响0人  PENG先森_晓宇

概念

单例模式 (Singleton Pattern),是一种常用的软件设计模式。通过单例模式可以保证系统中一个类仅有一个对象实例

  1. 构造函数是私有的:仅供内部初始化时创建
  2. 定义该类的静态私有对象:instance变量
  3. 定义一个静态的公有的函数:用于初始化或获取它本身的静态私有对象
  4. 禁止拷贝对象:重写__clone(),里面空实现

应用场景

资源共享的情况下,会使用单例模式,避免由于资源操作时导致的性能或损耗等。通常服务类型的可以设置成单例,如mysql,redis,kafka,rabbitmq等。

先上代码,是一个redis实例化的例子

<?php

namespace App\learn;

use Predis\Client;

class Redis
{

    private static $instance;

    private static $host;

    private static $port;

    private function __construct($host, $port)
    {
        self::$host = $host;
        self::$port = $port;
        return new Client($host, $port);
    }

    public static function getInstance($host, $port)
    {
        if (!self::$instance instanceof self) {
            self::$instance = new self($host, $port);
        }
        return self::$instance;
    }

    /**
     * 禁止克隆
     */
    private function __clone()
    {
    }
}

$redis = Redis::getInstance('192.168.43.243', 6379);

需要明白几个知识点

$home = new Home();
$cloneHome = clone $home;

如果将__clone魔术方法设置成private,则代码禁止克隆,上述代码在使用关键字clone时就会提示错误。

上一篇 下一篇

猜你喜欢

热点阅读