学习php设计模式 php实现单例模式(singleton)

yipeiwu_com6年前PHP代码库

保证一个类仅有一个实例,并且提供一个访问它的全局访问点。
单例模式有三个特点:
1、一个类只有一个实例
2、它必须自行创建这个实例
3、必须自行向整个系统提供这个实例
一、单例模式结构图

二、单例模式中主要角色
Singleton 定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类方法。负责创建它的唯一的实例。
三、单例模式的优点
1、对唯一实例的受控访问
2、缩小命名空间 单例模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间
3、允许对操作和表示的精华 单例类可以有子类。而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
4、允许可变数目的实例(多例模式)
5、比类操作更灵活
四、单例模式适用场景
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
2、当这个唯一实例应该是通过子类化可扩展的。并且用户应该无需更改代码就能使用一个扩展的实例时。
五、单例模式与其它模式】
工厂方法模式(factory method模式):单例模式使用工厂模式来提供自己的实例。
抽象工厂模式(abstract factory模式):抽象工厂模式可以使用单例模式,将具体工厂类设计成单例类。
建造者模式(Builder模式):建造模式可以将具体建造类设计成单例模式。
五、单例模式PHP示例

<?php
/**
 * 懒汉式单例类
 */
class Singleton {
 
 /**
  * 静态成品变量 保存全局实例
  */
 private static $_instance = NULL;
 
 /**
  * 私有化默认构造方法,保证外界无法直接实例化
  */
 private function __construct() {
 }
 
 /**
  * 静态工厂方法,返还此类的唯一实例
  */
 public static function getInstance() {
  if (is_null(self::$_instance)) {
   self::$_instance = new Singleton();
  }
 
  return self::$_instance;
 }
 
 /**
  * 防止用户克隆实例
  */
 public function __clone(){
  die('Clone is not allowed.' . E_USER_ERROR);
 }
 
 /**
  * 测试用方法
  */
 public function test() {
  echo 'Singleton Test!';
 }
 
}
 
/**
 * 客户端
 */
class Client {
 
  /**
  * Main program.
  */
 public static function main() {
  $instance = Singleton::getInstance();
  $instance->test();
 }
}
 
Client::main();
?>

以上就是使用php实现单例模式的代码,还有一些关于单例模式的概念区分,希望对大家的学习有所帮助。

相关文章

php实现的农历算法实例

本文实例讲述了php实现的农历算法。分享给大家供大家参考。具体如下: <?php function lunarcalendar ($month, $year) { g...

php图片加水印原理(超简单的实例代码)

文字水印: 复制代码 代码如下: $w = 80; $h = 20; $im = imagecreatetruecolor($w,$h); $textcolor = imagecolor...

phpExcel中文帮助手册之常用功能指南

PHPExcel基本操作: 定义EXCEL实体 即定义一个PHPEXCEL对象,并设置EXCEL对象内显示内容 // Excel开始 // 准备EXCEL的包括文件 // Error...

请php正则走开

  好了,那么我出几个题,不用正则,看我怎么解决的。        1.清除HTML中所有的标签...

php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值

prev() 定义和用法 prev() 函数把指向当前元素的指针移动到上一个元素的位置,并返回该元素值。 如果内部指针已经超过数组的第一个元素之前,函数返回 false。 语法 prev...