簡單工廠模式(Simple Factory Pattern):
又稱為靜態工廠方法(Static Factory Method)模式,它屬於類創建型模式。在簡單工廠模式中,可以根據參數的不同返回不同類的實例。簡單工廠模式專門定義一個類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
簡單工廠模式包含如下角色:
Factory:工廠角色,工廠角色負責實現創建所有實例的內部邏輯
Product:抽象產品角色,抽象產品角色是所創建的所有對象的父類,負責描述所有實例所共有的公共接口
ConcreteProduct:具體產品角色,具體產品角色是創建目標,所有創建的對象都充當這個角色的某個具體類的實例。
UML圖:
abstract class Fruit{ } class Apple extends Fruit{ function __construct(){ echo "Apple"; } } class Banana extends Fruit{ function __construct(){ echo "Banana"; } } class Factory{ static function fruit($classname){ if($classname == "Apple"){ return new Apple(); }else if($classname == "Banana"){ return new Banana(); } return null; } } /* //可以與類自動加載函數相結合 class Factory{ static function fruit($classname){ return new $classname(); } } */
//測試 Factory::fruit("Apple"); Factory::fruit("Banana");
簡單工廠模式的缺點
1、由於工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。
2、使用簡單工廠模式將會增加系統中類的個數,在一定程序上增加了系統的復雜度和理解難度。
3、系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,在產品類型較多時,有可能造成工廠邏輯過於復雜,不利於系統的擴展和維護。
4、簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構