標籤:roi instance 失敗 class 需要 限制 str ati const
1.單例模式
單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個執行個體。即一個類只有一個對象執行個體。
要實現每一個類只有一個執行個體,就需要對執行個體化進行限制。
單例模式實現要點:
① 建構函式私人化,不允許使用new關鍵字建立對象
② 對外提供擷取對象的方法。在方法中判斷對象是否為空白,如果為空白則建立對象並返回,如果不為空白則直接返回
③ 執行個體對象的屬性以及擷取對象的方法必須是靜態
④ 之後,建立對象只能使用我們提供的靜態方法。
PHP實現單例模式代碼如下:
1 class Singleton{ 2 static private $Single = null; 3 4 //建構函式私人化,不準使用new關鍵字建立對象 5 private function __construct(){} 6 7 static function getSingle(){ 8 if(!self::$Single){ 9 // self::$Single = new Singleton();//new self();10 self::$Single = new self();//和上面的語句等價 11 //上述陳述式完成了在類中通過靜態方法建立對象並返回。12 //self代指類名 new Singleton() 和new self()完全一樣;13 }14 return self::$Single;15 }16 }
最後將其執行個體化,並且只能使用類中提供的方法。
$singletonInstance = Singleton::getSingle();
上述代碼中,使用私人的靜態變數和靜態方法,通過類的靜態方法建立執行個體,並且進行判斷,如果第一次進行執行個體化,則成功,否則執行個體化失敗。如此一來,每個類只有一個執行個體,因而實現了單例模式。
2.簡單原廠模式
Factory 方法模式的意義是定義一個建立產品對象的工廠介面,將實際建立工作延遲到子類當中。核心工廠類不再負責產品的建立,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得Factory 方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。這樣可以讓程式耦合度降低,實現解耦。
簡單原廠模式PHP代碼如下:
1 interface Product{ 2 function productFunc(); 3 } 4 5 class Product1 implements Product{ 6 function productFunc(){ 7 echo "this is ProductA function"; 8 } 9 }10 11 class Product2 implements Product{12 function productFunc(){13 echo "this is ProductB function";14 }15 }16 17 class Factory{18 static function createPro($pro){19 switch ($pro) {20 case ‘ProductA‘:21 return new ProductA();22 break;23 case ‘ProductB‘:24 return new ProductB();25 break;26 default:27 break;28 }29 }30 }31 32 $proInstance1 = Factory::createPro("ProductA");33 $proInstance2 = Factory::createPro("ProductB"); 34 $proInstance1->productFunc();35 $proInstance2->productFunc();
3.Factory 方法模式
在原有的簡單原廠模式的基礎上,我們將工廠類也抽象出來,讓工廠的子類去完成具體的工作。
Factory 方法模式的PHP代碼如下:
1 interface Product{ 2 function productFunc(); 3 } 4 5 class Product1 implements Product{ 6 function productFunc(){ 7 echo "this is ProductA function"; 8 } 9 }10 11 class Product2 implements Product{12 function productFunc(){13 echo "this is ProductB function";14 }15 }16 17 //將工廠抽象出來,生產不同產品的具體功能交給他的子類完成18 interface Factory{19 function create();20 }21 22 //子類工廠A生產產品123 class FactoryA implements Factory(){24 static function create(){25 echo "this factory create ProductA";26 return new Product1();27 }28 }29 //子類工廠B生產產品230 class FactoryB implements Factory(){31 static function create(){32 echo "this factory create ProductB";33 return new Product2();34 }35 }36 37 $pro1 = FactoryA::create();38 $pro2 = FactoryB::create(); 39 $pro1->productFunc();40 $pro2->productFunc();
以上為單裡模式,簡單原廠模式,Factory 方法模式,的簡單,後期還會在此更新其他的設計模式。(未完待續)
PHP物件導向-設計模式 單例模式 簡單原廠模式 Factory 方法模式