工廠模式就是負責將大量有共同接口的類實例,而不必事先知道要實例化哪一個類的模式。工廠模式一般分爲三種:簡單工廠模式、工廠方法模式、抽象工廠模式。從模式性質來說,工廠模式屬於創建型模式。
簡單工廠模式定義
通常負責創建實例工廠類接收一個條件(參數),來決定實例化哪一個產品類。簡單工廠模式又被稱爲靜態工廠模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解爲是不同工廠模式的一個特殊實現。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<?php //
Simple Factory interface
IAnimal { function
Eat(); } class
Dog implements
IAnimal { public
function
Eat() { echo
"Dog Eat!" ; echo
"<br/>" ; } } class
Cat implements
IAnimal { public
function
Eat() { echo
"Cat Eat!" ; echo
"<br/>" ; } } class
SimpleFactory { function
CreateAnimal( $animal_type )
{ switch
( $animal_type )
{ case
'Dog' : return
new
Dog(); break ; case
'Cat' : return
new
Cat(); break ; default : exit ( 'Please
provide the type of animal you wana to create!' ); } } } //
Test $simplefactory
= new
SimpleFactory(); $dog
= $simplefactory ->CreateAnimal( 'Dog' ); $dog ->Eat(); $cat
= $simplefactory ->CreateAnimal( 'Cat' ); $cat ->Eat(); ?> |
優點
SimpleFactory根據接收不同的參數實例化不同的動物,對動物的實例化統一交給SimpleFactory工廠類來實現,客戶端不必知道動物類的具體名稱或者怎麼去完成實例化,而只需使用SimpleFactory類以及對應的實例化某動物的參數(“Dog”或者”Cat”等)來實例某動物就可以了。
缺點
整個模式的關鍵是SimpleFactory類,其中SimpleFactory創建動物方法中包含了創建動物的關鍵邏輯,而這往往容易違反高內聚的責任分配原則,也違反開放-封閉原則,因爲要添加新的動物時候,必須修改SimpleFactory的CreateAnimal方法,而開發-封閉原則是對擴展是開放的(Open for extension),而對修改是封閉的(Close for modification)。