+ -
当前位置:首页 → 问答吧 → 24种设计模式介绍与6大设计原则(PHP版)之单例模式

24种设计模式介绍与6大设计原则(PHP版)之单例模式

时间:2011-09-01

来源:互联网

这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的有人缘,单例就是单一、独苗的意思,那什么是独一份呢?你的思维是独一份,除此之外还有什么不能山寨的呢?
我们举个比较难复制的对象:皇帝
中国的历史上很少出现两个皇帝并存的时期,是有,但不多,那我们就认为皇帝是个单例模式,在这个场景中,有皇帝,有大臣,大臣是天天要上朝参见皇帝的,今天参拜的皇帝应该和昨天、前天的一样(过渡期的不考虑,别找茬哦),大臣磕完头,抬头一看,嗨,还是昨天那个皇帝,单例模式,绝对的单例模式
  1. <?php
  2. /**
  3. * 单例模式
  4. * 中国的历史上一般都是一个朝代一个皇帝
  5. * 有两个皇帝的话,必然要PK出一个皇帝出来
  6. *
  7. */
  8. class Emperor {
  9.         private static $emperor = null;//定义一个皇帝放在那里,然后给这个皇帝名字

  10.         //将构造函数设置成 private ,让构造函数只能在内部被调用,而外部不能调用。
  11.         //这样,这个类就不能被外部用 new 的方式建立多个实例了
  12.         private function __construct(){}

  13.         public static function getInstance()
  14.         {
  15.                 if(self::$emperor == null){//如果皇帝还没有定义,那就定一个
  16.                         self::$emperor = new Emperor();
  17.                         var_dump('self::$emperor = new Emperor(); ');
  18.                 }
  19.                 return self::$emperor;
  20.         }

  21.         //皇帝叫什么名字呀
  22.         public static function emperorInfo(){
  23.                 echo "我就是皇帝某某某...";
  24.         }
  25. }

  26. /**
  27. *  大臣是天天要面见皇帝
  28. * 今天见的皇帝和昨天的、前天的不一样那就出问题了!
  29. *
  30. */
  31. class Minister
  32. {
  33.         public static function doit() {
  34.          //第一天
  35.         $emperor1=Emperor::getInstance();
  36.         $emperor1->emperorInfo();//第一天见的皇帝叫什么名字呢?          
  37.          //第二天
  38.         $emperor2=Emperor::getInstance();
  39.         Emperor::emperorInfo();         
  40.          //第三天
  41.         $emperor3=Emperor::getInstance();
  42.         $emperor2->emperorInfo();
  43.        
  44.          //三天见的皇帝都是同一个人,荣幸吧!
  45.         }
  46. }

  47. $minister = new Minister();
  48. $minister->doit();
复制代码

作者: 顺顺利利   发布时间: 2011-09-01

顶一个!

作者: 单骑闯天下   发布时间: 2011-09-02