单例模式(Singleton Pattern)
单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
特点
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其他对象提供这一实例。
三私一公
- 屏蔽外部直接实例化该类(private)
- 禁止克隆(private)
- 存放实例对象(private)
- 自己创建自己的唯一实例,供外部调用(public)
Test.php(测试类)
<?php
namespace core;
class Test
{
private static $instance; // 存放实例对象
// 屏蔽外部直接实例化该类
private function __construct()
{
}
// 禁止对象克隆
private function __clone()
{
}
// 获取实例
public static function getInstance()
{
if (self::$instance) {
echo "已存在实例<br>";
} else {
self::$instance = new self();
echo "新实例化<br>";
}
return self::$instance;
}
public function test1()
{
echo "单例模式";
}
}
Factory.php(工厂类)
<?php
namespace core;
class Factory
{
// 实例化Test类
static function createTest()
{
$test = Test::getInstance();
return $test;
}
}
index.php
<?php
define("BASEDIR", __DIR__);
require_once (BASEDIR . "/core/Loader.php");
spl_autoload_register('\\core\\Loader::autoload');
$test = \core\Factory::createTest();
$test = \core\Factory::createTest();
$test = \core\Factory::createTest();
$test = \core\Factory::createTest();
$test->test1();
结果