工廠模式-簡單工廠模式

工廠模式就是負責將大量有共同接口的類實例,而不必事先知道要實例化哪一個類的模式。工廠模式一般分爲三種:簡單工廠模式工廠方法模式、抽象工廠模式。從模式性質來說,工廠模式屬於創建型模式。

簡單工廠模式定義

通常負責創建實例工廠類接收一個條件(參數),來決定實例化哪一個產品類。簡單工廠模式又被稱爲靜態工廠模式,但不屬於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)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章