设计模式之单例模式(php实现)

  github地址:https://github.com/ZQCard/design_pattern

单例模式:顾名思义就就是创建单个实例的模式。

优点:保证一个类仅有一个实例,并提供一个访问它的全局访问点。避免使用的类频繁地创建与销毁以致于造成不必要的消耗。

缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

应用实例:数据库的连接、web计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来等等

由于PHP是单线程,不用考虑多线程造成不完美的单例.

(1)Singleton.class.php

<?php

namespace Singleton;

class Singleton
{
public static $db = null;
private function __construct()
{
$dsn = 'mysql:host=localhost;dbname=blog';
$username = 'root';
$passwd = 'zhouqi445864742';
self::$db = new \PDO($dsn, $username, $passwd);
}

public static function getInstance()
{
if (self::$db == null){
self::$db = new Singleton();
}
return self::$db;
}
}

(2)客户端

<?php
spl_autoload_register(function ($className){
    $className = str_replace('\\','/',$className);
    include $className.".class.php";
});

use Singleton\Singleton;
$db = Singleton::getInstance();
$db2 = Singleton::getInstance();
echo $db === $db2 ? '单例':'失败';

 

posted @ 2018-05-29 19:54  周起  阅读(233)  评论(0编辑  收藏  举报