在開發大型系統過程中,往往會出現這樣一種情況:
我有一部分基礎資料,是類classa是從資料庫a讀取出來的,其他很多的功能都是基於這個基礎資料來操作的。現在呢,我想把資料從資料庫a變成從另外的資料來源去獲取,這時候,要修改起來就比較麻煩,要修改其他很多類的**。這種設計顯然是不夠靈活的,換句話說,就是緊耦合的,系統中某個部分的函式或類嚴重依賴於系統的其他部分中的函式或類的行為和結構。
工廠模式,就是解決這樣的一些情況的設計方法。工廠模式是一種類,建立了乙個工廠來根據所需來建立物件,這種方式在多型性程式設計中是很重要的,允許動態替換類,修改配置等。
工廠模式分為:簡單工廠模式、工廠方法模式、抽象工廠模式。
簡單工廠模式,通過靜態方法建立物件。可以理解成,只負責生產同一等級結構中的任何乙個產品,但是不能新增產品。
工廠方法模式,去掉了簡單工廠模式中方法的靜態屬性,使其可以被子類整合,定義乙個建立物件的介面,讓子類去決定例項化哪個類。可以理解成,用來生產同一等級結構中的固定產品,但是支援增加產品。
抽象工廠模式,提供乙個建立一系列相關或者相互依賴的物件的介面。可以理解成,用來生產不用型別的全部產品,但是不能增加新品,支援增加新的型別。
用**來一一舉例:
<?php
/**
* 基本工廠模式
* */
class user
public function getuser()
}
class use***ctory
}
$user = use***ctory::createuser();echo $user->getuser();
/**
*簡單工廠模式
* */
inte***ce userproperties
class user implements userproperties
public function getusername()
public function getgender()
public function getjob()
}
class use***ctory
}
$employers = [
['username' => 'jack', 'gender' => 'male', 'job' => 'coder'],
['username' => 'marry', 'gender' => 'female', 'job' => 'designer'],
];
$user = use***ctory::createuser($employers[0]);
echo $user->getusername();
/**
* 工廠方法模式
**/
inte***ce userproperties
inte***ce createuser
class user implements userproperties
public function getusername()
public function getgender()
public function getjob()
}
class use***ctory
public function getuser()
}
class factoryman implements createuser
}
class factorywoman implements createuser
}
class clientuser
}
$employers = [
['username' => 'jack', 'gender' => 'male', 'job' => 'coder'],
['username' => 'marry', 'gender' => 'female', 'job' => 'designer'],
];
$user = clientuser::getclient($employers[0]);
/**
* 抽象工廠模式
* */
inte***ce userproperties
inte***ce createuser
class user implements userproperties
public function getusername()
public function getgender()
public function getjob()
}
class use***ctory
public function getuser()
}
class factoryman implements createuser
function createintro($properties)
}
class factorywoman implements createuser
function createintro($properties)
}
class clientuser
}
$employers = [
['username' => 'jack', 'gender' => 'male', 'job' => 'coder'],
['username' => 'marry', 'gender' => 'female', 'job' => 'designer'],
];
$user = clientuser::getclient($employers[0]);
PHP 工廠模式
文章 簡單工廠模式 抽象基類 類中定義抽象一些方法,用以在子類中實現 繼承自抽象基類的子類 實現基類中的抽象方法 工廠類 用以例項化物件 看完文章再回頭來看下這張圖,效果會比較好 採用封裝方式 class calc result num1 num2 break return result catch...
PHP 工廠模式
一 什麼是工廠模式?乙個類通過本身的靜態方法來,例項化乙個類並返回乙個例項物件 二 工廠模式特點?類命名特點 namefactory eg class mysqlfactory 這是為了規範,當然也去起其他任意名字 靜態方法名稱 static public function factory clas...
PHP設計模式 工廠模式
使用工廠模式使得在呼叫方法時變得更容易,因為它只有乙個類和乙個方法,若沒有使用工廠模式,則要在呼叫時決定應該呼叫哪個類和哪個方法 使用工廠模式還使得未來對應用程式做改變時更加容易 比如要增加一種形狀的支援,只需要修改工廠類中的create 乙個方法,而沒有使用工廠模式,則要修改呼叫形狀的 塊。定義形...