Learning PHP Design Patterns.設計模式的宗旨就是重用,應用設計模式可以使我們的程式碼更加優雅、簡潔、低耦合。
一、單例模式
1.什麼是單例模式:
一個類最多隻能產生一個物件,如果希望在系統中某個類(連結資料庫的類)的物件只能存在一個,單例模式是最好的解決方案。
2.單利模式的實現:三私一公
①私有化構造方法:防止例項化
②私有化克隆方法:防止克隆
③私有化靜態屬性:儲存物件
④私有化靜態方法:獲取物件
3.程式碼實現
class Singleton{
private static $obj;//私有化靜態屬性
private function __construct(){
//私有化構造方法
}
private function __clone(){
//私有化克隆方法
}
//靜態方法產生物件
static public function getInstance(){
//物件不存在new一個物件
if(!is_object(self::$obj)){
self::$obj = new Singleton();
}
return self::$obj;
}
}
4.測試單例模式
//無法例項化,可以防止new例項化這個類,強制使用getInstance方法,建立物件
$obj1 = new Singleton;
var_dump($obj1);
//成功獲取物件
$obj2 = Singleton::getInstance();
var_dump($obj2);
//無法克隆
$obj3 = clone $obj2;
var_dump($obj3);
二、工廠模式
這也是一個很基本,很簡單,很常用的設計模式。
本來我們要獲取一個類的例項,需要用到new關鍵字。但是如果new 直接寫到業務程式碼裡,一個類在很多地方都例項化過,以後要是這個類出了什麼問題,比如要改個名字(實際中,你更多的可能是修改建構函式方法),那麼就尷尬了,需要改很多地方。
工廠模式
,顧名思義,就是不用new來獲得例項,而是把業務類放進一個工場類裡,由工廠(類)『生產』出對應的例項
。
實現
SimpleFactory.php
<?php
namespace DesignPatternsCreationalSimpleFactory;
class SimpleFactory
{
public function createBicycle(): Bicycle
{
return new Bicycle();
}
}
Bicycle.php
<?php
namespace DesignPatternsCreationalSimpleFactory;
class Bicycle
{
public function driveTo(string $destination)
{
}
}
使用
$factory = new SimpleFactory();
$bicycle = $factory->createBicycle();
$bicycle->driveTo(`Paris`);
我們需要什麼樣的例項,就到工廠的例項方法裡去拿。這裡只定義了一個類的例項,你可以定義更多。
我們看到,業務程式碼裡沒有出現 new以及那個具體的業務類, 這樣 業務類(class Bicycle)我們可以隨便改,以後更新的時候只要在工廠類(class SimpleFactory)裡修改一次,就可以一對多的在各處生效了。
但是,這個方法名字 $factory->createBicycle();
你得起好,如果你要改這個名字,還是得到多個地方改的。
工廠的作用,簡而言之,就是在工廠裡邊建立業務需要的例項物件,然後,在業務層建立工廠物件呼叫裡邊相關的建立物件方法即可。
總結
-
工廠類必須有一個工廠方法;
-
工廠方法必須能夠返回一個其他類的例項;
-
一次只能建立和返回一個例項;
三、PHP設計模式彙總
相關文章:
php設計模式之單例模式
TIGERB的:一個php技術棧後端猿的知識儲備大綱
php 設計模式之工廠模式、單例模式、註冊樹模式