工廠模式代碼:
代碼如下 復制代碼
<?php
//首先定義什麼是人類
interface Human {
//人是愉快的,會笑的
public function laugh();
//人類還會哭,代表痛苦
public function cry();
//人類會說話
public function talk();
}
//然後定義具體的人種
class YellowHuman implements Human {//黃色人種,這個翻譯的不准確,將就點吧
function cry() { var_dump( "黃色人種會哭");}
function laugh() {var_dump( "黃色人種會大笑,幸福呀!");}
function talk() {var_dump( "黃色人種會說話,一般說的都是雙字節"); }
}
class WhiteHuman implements Human { //白色人種
public function cry() {var_dump("白色人種會哭");}
public function laugh() {var_dump("白色人種會大笑,侵略的笑聲"); }
public function talk() {var_dump("白色人種會說話,一般都是但是單字節!"); }
}
class BlackHuman implements Human { //黑色人種
public function cry() {var_dump("黑色人種會哭");}
public function laugh() {var_dump("黑色人種會大笑,侵略的笑聲"); }
public function talk() {var_dump("黑色人種會說話,一般都是但是單字節!"); }
}
//人種也定義完畢了,那我們把八卦爐定義出來:
class HumanFactory {
//定一個烤箱,泥巴塞進去,人就出來,這個太先進了
public static function createHuman( $c ){
if ($c instanceof Human ) {//判斷是否繼承自Human
return $c;
}else {
var_dump("必須跟HuMan有一腿");
}
}
}
var_dump("------------造出的第一批人是這樣的:白人-----------------");
$whiteHuman = HumanFactory::createHuman( new WhiteHuman());
$whiteHuman->cry();
$whiteHuman->laugh();
$whiteHuman->talk();
//女娲第二次造人,火候加足點,然後又出了個次品,黑人
var_dump("nn------------造出的第二批人是這樣的:黑人-----------------");
$blackHuman = HumanFactory::createHuman(new BlackHuman());
$blackHuman->cry();
$blackHuman->laugh();
$blackHuman->talk();
//第三批人了,這次火候掌握的正好,黃色人種(不寫黃人,免得引起歧義),備注:RB人不屬於此列
var_dump("nn------------造出的第三批人是這樣的:黃色人種-----------------");
$yellowHuman = HumanFactory::createHuman(new YellowHuman());
$yellowHuman->cry();
$yellowHuman->laugh();
$yellowHuman->talk();