1. 程式人生 > >PHP面向對象-設計模式 單例模式 簡單工廠模式 工廠方法模式

PHP面向對象-設計模式 單例模式 簡單工廠模式 工廠方法模式

單例 nbsp 私有化 {} 意義 pan php代碼 get fun

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.簡單工廠模式

  工廠方法模式的意義是定義一個創建產品對象的工廠接口,將實際創建工作推遲到子類當中。核心工廠類不再負責產品的創建,這樣核心類成為一個抽象工廠角色,僅負責具體工廠子類必須實現的接口,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。這樣可以讓程序耦合度降低,實現解耦。

  簡單工廠模式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.工廠方法模式

  在原有的簡單工廠模式的基礎上,我們將工廠類也抽象出來,讓工廠的子類去完成具體的工作。

  工廠方法模式的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生產產品1
23     class FactoryA implements Factory(){
24         static function create(){
25             echo "this factory create ProductA";
26             return new Product1();
27         }
28     }
29     //子類工廠B生產產品2
30     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();

  

  以上為單裏模式,簡單工廠模式,工廠方法模式,的簡單,後期還會在此更新其他的設計模式。(未完待續)

PHP面向對象-設計模式 單例模式 簡單工廠模式 工廠方法模式