PHP工廠模式的理解和總結
每次看設計模式都感覺很奇妙,看不同的文章會發現不同的理解。然而這些模式如果不去寫 composer 包,框架,我們很少會用到。但是這種思路是很好的。因爲容易忘記所以寫下來以供參考。
工廠模式(工廠方法模式)
工廠模式,是由抽象的類決定的 所以的產品都要 去繼承一個抽象的接口。每一個產品都有一個工廠。
// 有抽象的類來控制 工廠的生成的產品
interface people
{
public function sex();
}
// 具體產品的實現
class Women implements people
{
public function sex()
{
// TODO: Implement sex() method.
}
}
class Men implements people
{
public function sex()
{
// TODO: Implement sex() method.
}
}
class WomenFactory {
public function createSex()
{
return new Women();
}
}
class MenFactory{
public function createSex()
{
return new Men();
}
}
簡單工廠
- 網上說法很多
不過我認爲簡單工廠模式就是把工廠生成出來的產品放在一個控制器中去調用,客戶端需要什麼直接告訴工廠,工廠來進行生產。但是
1.如果需要添加產品的話我們需要添加新的分支,違背了開閉原則。
2.如果需要修改莫個產品你需要修改工廠,修改另一個產品你還需要修改工廠違背了單一職責原則。
class Men
{
public function sex()
{
}
}
class WoMen
{
public function sex()
{
}
}
class PeopleFactory{
public function createSex($sex)
{
switch ($sex){
case 'men':
return new Men();
break;
case 'women':
return new Women();
break;
}
}
}
抽象工廠模式
抽象工廠模式 建立在工廠模式上 然後每一個工廠去繼承一個抽象工廠接口,客戶端只需要知道抽象工廠接口,無需關係它是那個工廠類,只需要把它當成抽象工廠接口使用即可,但是 如果抽象工廠接口需要添加一個新的功能會影響到所有的工廠。
interface people
{
public function sex();
}
class Women implements people
{
public function sex()
{
// TODO: Implement sex() method.
}
}
class Men implements people
{
public function sex()
{
// TODO: Implement sex() method.
}
}
interface Factory{
public function created();
}
class WomenFactory implements Factory{
public function created()
{
return new Women();
}
}
class MenFactory implements Factory{
public function created()
{
return new Men();
}
}
總結
工廠模式 最主要的就是 不需要考慮如何生成的。只關注與功能。
簡單工廠模式-> 就是一個簡單小的比如可能就少數功能需要,而且生成的產品很少。如果產品比較多,就需要考慮工廠模式了。當你建造了一個工廠後,讓別人調用的時候,就需要考慮抽象工廠模式了。可能你的工廠只需要出一個產品,限購,那你就可以採用靜態工廠模式。