header("Content-type: text/html; charset=UTF-8");
/**
* 工厂方法模式
* 女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这
* 个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛
* 蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到
* 都是静态的东西呀,怎么办?
* 别忘了是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创建人,
* 具体过程是这样的:先是泥巴捏,然后放八卦炉里烤,再扔到地上成长,但是意外总是会产生的:
* 第一次烤泥人,兹兹兹兹~~,感觉应该熟了,往地上一扔,biu~,一个白人诞生了,没烤熟!
* 第二次烤泥人,兹兹兹兹兹兹兹兹~~,上次都没烤熟,这次多烤会儿,往地上一扔,嘿,熟过头了,黑人哪!
* 第三次烤泥人,兹~兹~兹~,一边烤一边看着,嘿,正正好,Perfect!优品,黄色人类!【备注:RB 人不属此列】
*
*/
/**
* 定义一个人类的统称
*/
interface Human {
//首先定义什么是人类
//人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间没有大笑了;
public function laugh();
//人类还会哭,代表痛苦
public function cry();
//人类会说话
public function talk();
// 类名
public function getClassname();
}
// 然后定义具体的人类:
/**
* 黄色人类,这个翻译的不准确,将就点吧
*/
class YellowHuman implements Human {
function laugh(){
return "黄色人类会哭";
}
function cry(){
return "黄色人类会大笑,幸福呀!";
}
function talk(){
return "黄色人类会说话,一般说的都是双字节";
}
function getClassname(){
return __CLASS__;
}
}
/**
* 白色人类
*/
class WhiteHuman implements Human {
function laugh(){
return "白色人类会哭";
}
function cry(){
return "白色人类会大笑,侵略的笑声";
}
function talk(){
return "白色人类会说话,一般都是但是单字节!";
}
function getClassname(){
return __CLASS__;
}
}
/**
* 黑色人类,记得中学学英语,老师说black man是侮辱人的意思,不懂,没跟老外说话
*/
class BlackHuman implements Human {
function laugh(){
return "黑人会哭";
}
function cry(){
return "黑人会笑";
}
function talk(){
return "黑人可以说话,一般人听不懂";
}
function getClassname(){
return __CLASS__;
}
}
// 人类也定义完毕了,那我们把八卦炉定义出来:
class HumanFactory {
private static $objNames = array('YellowHuman', 'WhiteHuman', 'BlackHuman');
private static $obj = array();
public static function createHuman($human = null){
$humanObj = null;
if($human instanceof Human){
$humanObj = $human;
}else{
/**
* 避免多次实例对象
* 工厂方法模式还有一个非常重要的应用,就是延迟始化(Lazy initialization),什么是延迟始化呢?
* 一个对象初始化完毕后就不释放,等到再次用到得就不用再次初始化了,直接从内存过中拿到就可以了
*/
try {
$objName = self::$objNames[rand(0, count(self::$objNames)-1)];
self::$obj[strtolower($objName)] || self::$obj[strtolower($objName)] = new $objName;
} catch (Exception $e) {
$objName = self::$objNames[0];
self::$obj[strtolower($objName)] || self::$obj[strtolower($objName)] = new $objName;
}
$humanObj = self::$obj[strtolower($objName)];
}
return $humanObj;
}
}
/**
* 首先定义女娲,这真是额的神呀
*/
class NvWa {
function __construct(){
//女娲第一次造人,试验性质,少造点,火候不足,缺陷产品
echo "------------造出的第一批人是这样的:白人-----------------<br>";
$whiteHuman = HumanFactory::createHuman(new WhiteHuman());
echo $whiteHuman->laugh().str_repeat("<br>", 1);
echo $whiteHuman->cry().str_repeat("<br>", 1);
echo $whiteHuman->talk().str_repeat("<br>", 1);
echo str_repeat("<br>", 2);
//女娲第二次造人,火候加足点,然后又出了个次品,黑人
echo "------------造出的第二批人是这样的:黑人-----------------<br>";
$blackHuman = HumanFactory::createHuman(new BlackHuman());
echo $blackHuman->laugh().str_repeat("<br>", 1);
echo $blackHuman->cry().str_repeat("<br>", 1);
echo $blackHuman->talk().str_repeat("<br>", 1);
echo str_repeat("<br>", 2);
//女娲第二次造人,火候加足点,然后又出了个次品,黑人
echo "------------造出的第三批人是这样的:黄色人类-----------------<br>";
$yellowHuman = HumanFactory::createHuman(new YellowHuman());
echo $yellowHuman->laugh().str_repeat("<br>", 1);
echo $yellowHuman->cry().str_repeat("<br>", 1);
echo $yellowHuman->talk().str_repeat("<br>", 1);
echo str_repeat("<br>", 2);
//女娲烦躁了,爱是啥人类就是啥人类,烧吧
for($i=0, $num = 10; $i<$num; $i++){
echo "------------随机产生人类了-----------------". ($i+1) ."<br>";
$human = HumanFactory::createHuman();
echo $human->cry().str_repeat("<br>", 1);
echo $human->laugh().str_repeat("<br>", 1);
echo $human->talk().str_repeat("<br>", 1);
echo str_repeat("<br>", 2);
}
}
}
new NvWa();
运行结果:
------------造出的第一批人是这样的:白人-----------------
白色人类会哭
白色人类会大笑,侵略的笑声
白色人类会说话,一般都是但是单字节!
------------造出的第二批人是这样的:黑人-----------------
黑人会哭
黑人会笑
黑人可以说话,一般人听不懂
------------造出的第三批人是这样的:黄色人类-----------------
黄色人类会哭
黄色人类会大笑,幸福呀!
黄色人类会说话,一般说的都是双字节
------------随机产生人类了-----------------1
白色人类会大笑,侵略的笑声
白色人类会哭
白色人类会说话,一般都是但是单字节!
------------随机产生人类了-----------------2
黑人会笑
黑人会哭
黑人可以说话,一般人听不懂
------------随机产生人类了-----------------3
白色人类会大笑,侵略的笑声
白色人类会哭
白色人类会说话,一般都是但是单字节!
------------随机产生人类了-----------------4
黑人会笑
黑人会哭
黑人可以说话,一般人听不懂
------------随机产生人类了-----------------5
黑人会笑
黑人会哭
黑人可以说话,一般人听不懂
------------随机产生人类了-----------------6
白色人类会大笑,侵略的笑声
白色人类会哭
白色人类会说话,一般都是但是单字节!
------------随机产生人类了-----------------7
白色人类会大笑,侵略的笑声
白色人类会哭
白色人类会说话,一般都是但是单字节!
------------随机产生人类了-----------------8
白色人类会大笑,侵略的笑声
白色人类会哭
白色人类会说话,一般都是但是单字节!
------------随机产生人类了-----------------9
黄色人类会大笑,幸福呀!
黄色人类会哭
黄色人类会说话,一般说的都是双字节
------------随机产生人类了-----------------10
白色人类会大笑,侵略的笑声
白色人类会哭
白色人类会说话,一般都是但是单字节!