顧名思義,此篇介紹工廠模式中的簡單工廠,工廠模式屬於建立型模式,而工廠模式分爲簡單工廠,靜態工廠,抽象工廠,由淺到深,上篇介紹了最基本的單例,而簡單工廠也是工廠模式裏最基本的。php
優勢:實例化對象,根據參數獲取對應的對象,避免直接實例化,下降耦合。
缺點:需知全部的類型,不符合設計模式的開閉原則,當類型增長,工廠也須要修改。
複製代碼
Api: 用於構建用戶功能,抽象接口,只負責抽象,不負責實現。
AchieveApi: 功能對象,用於實現接口。
Factory: 用於生產(建立)功能對象。
複製代碼
仍是以故事的形式來敘述。 昨天是端午節日,放假了,小陳要回家,回家要用到車,可是回家的方式有不少種,不知道該開車回,仍是坐車,仍是騎自行車回。設計模式
一、功能接口ide
class Api {
// 要回家
public function goHome(string $message){}
}
複製代碼
二、實現功能的工具工具
// 開車
class Car implements Api {
public function goHome(string $message) {
echo "開車回";
}
}
// 坐車
class ByCar implements Api {
public function goHome(string $message) {
echo "坐車回";
}
}
// 騎車
class RideCar implements Api {
public function goHome(string $message) {
echo "騎車回";
}
}
複製代碼
三、構建工廠測試
class EasyFactory {
public static function getFactory(int type) {
// 約定方法
switch(type) {
case 1:
return new Car();
break;
case 2:
return new ByCar();
break;
case 3:
return RideCar();
break;
default:
die('超了');
}
}
}
複製代碼
四、測試spa
$xiaochen1 = EasyFactory::getFactory(1); // 開車
$xiaochen1->goHome();
$xiaochen2 = EasyFactory::getFactory(2); // 坐車
$xiaochen2->goHome();
$xiaochen2 = EasyFactory::getFactory(3); // 騎車
$xiaochen2->goHome();
複製代碼
以上方法就是簡單的工廠模式,在使用時直接進行調用,不須要知道建立的邏輯,想開車回,直接去開就能夠,下次本身沒時間,家裏人也直接能開,不用管車是怎麼造出來的(前提是知道有個車),通常簡單工廠是用來隔離實現,讓外部只能經過特定的接口或者方法來操做。設計