案例
黑棗轉殖公司是專門批量生產轉殖狗的一家企業。當轉殖出乙隻黑狗的實現**如下
實現**
>
class doggener
if($color == 'red')
}}class blackdog
}class reddog
}$doggen = new doggener();
$doggen->create('black');
分析ooa:軟體工程師發現,doggener
類的create
方法隨著
dog各類不斷擴充而變得難以維護。
doggener
類目前是依賴於大量的
dog類,並且將
doggener
類與dog
類緊密耦合。這些類之前相互通訊,但我們並不希望它們繫結在一起。
物件導向設計強調「抽象類高於實現」。也就是說,我們盡量一般化而不是特殊化。工廠方法解決了當你的**關注於抽象型別時如何建立物件例項的問題。我們使用特定的類來處理例項化。我們先來使用簡單工廠方法(****** factory);
設計ood:
1. 抽象類dog
為狗的基類,定義所有
dog都應該實現
shout方法
2. reddog、
blackdog
為dog
類的特化
3. ******dogfactory為簡單工廠類,定義了靜態方法
create,
接受color
引數建立並返回
dog例項
程式設計 oop:
**>
abstract class dog
class reddog extends dog
}class blackdog extends dog
}class ******dogfactory}}
測試用例test case:
**>
class testdriver
}$test = new testdriver();
$test->run();
輸出
小結:
我們從開閉原則(對擴充套件開放;對修改封閉)上來分析下簡單工廠模式。
當需要生產乙隻狗的時候,只需要通知工廠類******dogfactory
狗的顏色
color
就可以了。具體的生產過程全封裝在
******dogfactory
中,所以對產品部分來說,它是符合開閉原則的。
但是工廠部分好像不太理想,因為每增加個類狗,都要在工廠類中增加相應的業務邏輯或者判斷邏輯,這顯然是違背開閉原則的。可想而知對於新產品的加入,工廠類是很被動的。對於這樣的工廠類,我們稱它為全能類或者上帝類。我們舉的例子是最簡單的情況,而在實際應用中,很可能產品是乙個多層次的樹狀結構。由於簡單工廠模式中只有乙個工廠類來對應這些產品,所以這可能會把我們的上帝累壞了,也累壞了我們這些程式設計師
於是工廠方法模式作為救世主出現了。
php 設計模式之簡單工廠模式
摘要 學習php,不知道工廠模式,怎麼去看框架原始碼,怎麼能夠透徹理解php這門語言呢?1 類的宣告 一些修飾類關鍵字 class 類名修飾類的關鍵字 abstract final 訪問控制修飾符包括這三個 public private protect 關鍵字,用來修飾類 成員屬性 成員方法,使它們...
php設計模式之簡單工廠模式
簡單工廠模式 抽象基類 類中定義抽象一些方法,用以在子類中實現 繼承自抽象基類的子類 實現基類中的抽象方法 工廠類 用以例項化所有相對應的子類 定義個抽象的類,讓子類去繼承實現它 abstract class operation 加法類 class operationadd extends oper...
PHP設計模式之簡單工廠模式
先從簡單工廠入門,不管是面試還是被他人面試,在問到設計模式的時候,大多數人都會提到工廠模式。毫無疑問,工廠相關的幾種模式在設計模式中是最出名的也是應用比較廣泛的一種模式。在gof設計模式中也都是屬於建立型的模式。但是,能夠說明白簡單工廠 工廠模式 抽象工廠模式這三種模式的人還真能讓面試官刮目相看。這...