php單例模式和工廠模式

2021-09-17 20:25:05 字數 1732 閱讀 1544

單例模式

1.概念:保證系統中,應用該模式的乙個類只有乙個例項。即乙個類只有乙個物件例項(節省例項化物件時間以及占用的空間)

2.三私一公:私有的構造方法  私有的轉殖方法  私有的靜態屬性  公有的靜態方法(對外提供獲取例項的方法)

3.適用場景:經常使用在一些連線場景   mysql,redis等連線

4.編碼:

/**

* created by phpstorm.

* user: 申大俠

* date: 2019/4/10

* time: 11:13

*/class singleton

public function __clone()

public static function getinstance()

return self::$instance;

}public function set($name)

}$obj1 = singleton::getinstance();

$obj2 = singleton::getinstance();

$obj1->set("shen");

$obj2->set("ning");

echo $obj1->name; //輸出結果: ning

echo $obj2->name; //輸出結果: ning

//原因: 單例模式只new一次 開闢一塊空間 所以後續的例項都是操作的同一塊空間

//引用easyswoole裡的單例實現

trait singletont

return self::$instance;

}}// 注: 首先,他們的區別只有在繼承中才能體現出來,如果沒有任何繼承,那麼這兩者是沒有區別的。

//然後,new self()返回的例項是萬年不變的,無論誰去呼叫,都返回同乙個類的例項,而new static()則是由呼叫者決定的

//具體請移駕:

class test

}$obj1 = test::getinstance();

$obj2 = test::getinstance();

$obj1->set("shen");

$obj2->set("ning");

echo $obj1->name; //輸出結果: ning

echo $obj2->name; //輸出結果: ning

工廠模式

1.概念:是用工廠方法代替new操作的一種模式。只需呼叫工廠裡的方法得到例項,大大解耦**,如果後期修改類功能或者類名,只需修改工廠

方法就ok,不需要涉及到業務**

2.使用場景:對上層的使用者隔離物件建立的過程;或者是物件建立的過程複雜,使用者不容易掌握;或者是物件建立要滿足某種條件,

這些條件是業務的需求也好,是系統約束也好,沒有必要讓上層使用者掌握,增加別人開發的難度。

補充:mvc裡的db class來說明,外部呼叫的時候只需選擇自己所需的表名,該工廠會去呼叫真實資料庫處理方法,然後返回你想要的結果

3.編碼:

/**

* created by phpstorm.

* user: 申大俠

* date: 2019/4/10

* time: 13:13

*/class dbfactory

else

}}trycatch (\exception $e)

PHP單例模式和工廠模式

單例模式又稱為職責模式,它用來在程式中建立乙個單一功能的訪問點,通俗地說就是例項化出來的物件是唯一的。所有的單例模式至少擁有以下三種公共元素 1.它們必須擁有乙個建構函式,並且必須被標記為private 2.它們擁有乙個儲存類的例項的靜態成員變數 3.它們擁有乙個訪問這個例項的公共的靜態方法 單例類...

php 單例模式和工廠模式

header content type text html charset utf 8 定義字元編碼,防止亂碼 單例類 class single private function clone 定義乙個空方法防止被外部轉殖 public static function getinstance 定義乙個...

PHP單例模式,工廠模式

單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。三私一公 三私一公 class single 私有的轉殖 private function clone 公有的獲取例項的方法 public static function getinstance return self inst...