<?php
header("Content-type: text/html; charset=UTF-8");
/**
* 多例模式
* 这种情况有没有?有!大点声,有没有? 有!,是,确实有,就出现在明朝,那三国期间的算不算,
* 不算,各自称帝,各有各的地盘,国号不同。大家还记得那首诗《石灰吟》吗?作者是谁?于谦,他是被
* 谁杀死的?明英宗朱祁镇,对,就是那个在土木堡之变中被瓦刺俘虏的皇帝,被俘虏后,他弟弟朱祁钰当
* 上了皇帝,就是明景帝,估计当上皇帝后乐疯了,忘记把老哥朱祁镇削为太上皇了,我Shit,在中国的历
* 史上就这个时期是有2 个皇帝,你说这期间的大臣多郁闷,两个皇帝耶,两个精神依附对象呀。
* 这个场景放到我们设计模式中就是叫有上限的多例模式(没上限的多例模式太容易了,和你直接new 一
* 个对象没啥差别,不讨论)
*/
class Emperor {
private static $maxNumOfEmperor = 2; //最多只能有两个皇帝
private static $emperorList= array(); //装皇帝的列表;
private static $countNumOfEmperor = 0; //正在被人尊称的是那个皇帝
private $emperorInfo = null; //皇帝叫什么名字
private function __construct($info = null){
$this->emperorInfo = $info;
}
/**
* 返回多例中的一个对象,随机或者指定
* @param $objNum
*/
public static function getInstance($objNum = null){
// 初始化生成多个对象
if(!self::$emperorList){
for($i =0; $i < self::$maxNumOfEmperor; $i++){
self::$emperorList[$i] = new self("皇".($i+1)."帝");
}
}
// 返回对象
if(!is_null($objNum) && (int) $objNum < self::$maxNumOfEmperor){
$i = (int) $objNum;
}else{
$i = rand(0, self::$maxNumOfEmperor-1);
}
return self::$emperorList[$i];
}
public function emperorInfo(){
return $this->emperorInfo;
}
}
/**
* 大臣们悲惨了,一个皇帝都伺候不过来了,现在还来了两个个皇帝
* TND,不管了,找到个皇帝,磕头,请按就成了!
*/
class Minister {
function __construct(){
for($i =0, $num = 10; $i < $num; $i++){
echo "第".($i+1)."个大臣参拜的是:";
echo Emperor::getInstance()->emperorInfo();
echo str_repeat("<br>", 2);
}
}
}
new Minister();
header("Content-type: text/html; charset=UTF-8");
/**
* 多例模式
* 这种情况有没有?有!大点声,有没有? 有!,是,确实有,就出现在明朝,那三国期间的算不算,
* 不算,各自称帝,各有各的地盘,国号不同。大家还记得那首诗《石灰吟》吗?作者是谁?于谦,他是被
* 谁杀死的?明英宗朱祁镇,对,就是那个在土木堡之变中被瓦刺俘虏的皇帝,被俘虏后,他弟弟朱祁钰当
* 上了皇帝,就是明景帝,估计当上皇帝后乐疯了,忘记把老哥朱祁镇削为太上皇了,我Shit,在中国的历
* 史上就这个时期是有2 个皇帝,你说这期间的大臣多郁闷,两个皇帝耶,两个精神依附对象呀。
* 这个场景放到我们设计模式中就是叫有上限的多例模式(没上限的多例模式太容易了,和你直接new 一
* 个对象没啥差别,不讨论)
*/
class Emperor {
private static $maxNumOfEmperor = 2; //最多只能有两个皇帝
private static $emperorList= array(); //装皇帝的列表;
private static $countNumOfEmperor = 0; //正在被人尊称的是那个皇帝
private $emperorInfo = null; //皇帝叫什么名字
private function __construct($info = null){
$this->emperorInfo = $info;
}
/**
* 返回多例中的一个对象,随机或者指定
* @param $objNum
*/
public static function getInstance($objNum = null){
// 初始化生成多个对象
if(!self::$emperorList){
for($i =0; $i < self::$maxNumOfEmperor; $i++){
self::$emperorList[$i] = new self("皇".($i+1)."帝");
}
}
// 返回对象
if(!is_null($objNum) && (int) $objNum < self::$maxNumOfEmperor){
$i = (int) $objNum;
}else{
$i = rand(0, self::$maxNumOfEmperor-1);
}
return self::$emperorList[$i];
}
public function emperorInfo(){
return $this->emperorInfo;
}
}
/**
* 大臣们悲惨了,一个皇帝都伺候不过来了,现在还来了两个个皇帝
* TND,不管了,找到个皇帝,磕头,请按就成了!
*/
class Minister {
function __construct(){
for($i =0, $num = 10; $i < $num; $i++){
echo "第".($i+1)."个大臣参拜的是:";
echo Emperor::getInstance()->emperorInfo();
echo str_repeat("<br>", 2);
}
}
}
new Minister();
运行结果如下:
第1个大臣参拜的是:皇2帝
第2个大臣参拜的是:皇2帝
第3个大臣参拜的是:皇1帝
第4个大臣参拜的是:皇2帝
第5个大臣参拜的是:皇2帝
第6个大臣参拜的是:皇2帝
第7个大臣参拜的是:皇1帝
第8个大臣参拜的是:皇2帝
第9个大臣参拜的是:皇2帝
第10个大臣参拜的是:皇2帝