1. <?php
  2. /**
  3.  * @name: 设计模式--单件模式
  4.  * ============================================================================
  5.  * 详细说明
  6.  * 意图:
  7.  * 保证一个类仅有一个实体,并提供一个访问它的全局访问点。
  8.  * 适用性:
  9.  * 1、当类只能有一个实例并且客户可以从一个众所周知的访问点访问它时。
  10.  * 2、当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
  11.  * 说明:常用的方法是使用一个静态的方式函数(getinstance),并且通过它来返回唯一的单件对象实例,当你第一次访问它的时候,这个函数创建一个实例,并且保存为一个私有的静态变量,并把对象实例返回给你。在接下来的使用中,它无需再次生成实例,而是直接把保存的实例处理量返回给你。
  12.  * ============================================================================
  13.  * @copyright: http://blog.csdn.net/wkjs
  14.  * @author: 王康
  15. */
  16. class Singleton {
  17.     
  18.     /**
  19.      * 定义私有对象变量并设置为空
  20.      *
  21.      * @var Singleton 
  22.      *
  23.      */
  24.     static $instance=null;
  25.     
  26.     
  27.     /**
  28.      * 构造函数
  29.      *
  30.      * @return void void
  31.      *
  32.      */
  33.     private function __construct() {
  34.         echo '构造函数<br />';                      //用来测试创建几次对象
  35.     }
  36.     
  37.     /**
  38.      * 单件模式的入口
  39.      *
  40.      * @return Singleton 返回单件模式唯一对象
  41.      *
  42.      */
  43.     public static function getInstance() {
  44.         if(Singleton::$instance==null) {            //判断对象实例是否存在,如果不存在则创建新对象实例
  45.             Singleton::$instance=new Singleton();   //创建新对象实例
  46.         }
  47.         return Singleton::$instance;                //返回对象实例
  48.     }
  49. }
  50. ?>
  51. <?php
  52. /**
  53.  * @name: 设计模式--单件模式
  54.  * ============================================================================
  55.  * 测试代码
  56.  * ============================================================================
  57.  * @copyright: http://blog.csdn.net/wkjs
  58.  * @author: 王康
  59. */
  60. include_once 'class.Singleton.php';
  61. $a=Singleton::getInstance();
  62. $b=Singleton::getInstance();
  63. $c=Singleton::getInstance();
  64. if($a==$b & $a==$c & $b==$c) {
  65.     echo 'a,b和c为同一对象!'.'<br />';
  66. else {
  67.     echo 'a,b和c为不同对象!'.'<br />';
  68. }
  69. ?>
posted on 2008-10-15 13:22  wkjs  阅读(115)  评论(0编辑  收藏  举报