一、定義
簡單工廠模式屬於類的創建型模式,又叫做靜態工廠方法模式,但不屬於23種FOG設計模式之一。通過專門定義一個工廠類來負責創建其他類的實例,被創建的實例通常都具有共同的父類。
二、角色和職能
1.工廠(Creator)角色
1.簡單工廠模式的核心,它負責實現創建所有實例的內部邏輯。工廠類可以被外界直接調用,創建所需的產品對象。
2.抽象(Product)角色
簡單工廠模式所創建的所有對象的父類,它負責描述所有實例所共有的公共接口。
3.具體產品(Concrete Product)角色
UML類圖如下:
三、具體實現
#include<stdio.h>
#include<iostream>
using namespace std;
class Fruit{
public:
virtual void getName() = 0;
};
class Banana:public Fruit{
public:
void getName(){
cout<< "I'm banana"<<endl;
}
};
class Apple:public Fruit{
public:
void getName(){
cout<< "I'm apple"<<endl;
}
};
class FruitFactory{
public:
Fruit* getFruit(char *name){
if(strcmp(name,"Banana") == 0 ){
return new Banana;
}else if(strcmp(name,"Apple") == 0){
return new Apple;
}//可以添加其他水果
else{
cout<<"The fruit not exist."<<endl;
exit(0);
}
}
};
int main(){
FruitFactory *factory = nullptr;
Fruit *fruit = nullptr;
//創建水果工廠
factory = new FruitFactory;
//根據名字創建不同的水果
fruit = factory->getFruit("Banana");
fruit->getName();
delete fruit;
fruit = factory->getFruit("Apple");
fruit->getName();
delete fruit;
delete factory;
return 0;
}
四、簡單工廠模式的優缺點
優點:
工廠類是整個模式的關鍵所。它能夠根據給定的信息,決定究竟應該創建哪個具體類的對象。用戶在使用時可以直接根據工廠類去創建所需的實例,而無需瞭解這些對象是如何創建以及如何組織的。有利於整個軟件體系結構的優化。
缺點:
簡單工廠模式的缺點也正體現在其工廠類上,由於工廠類集中了所有實例的創建邏輯,所以“高內聚”。另外,當系統中的具體產品類不斷增多時,可能會出現要求工廠類也要做相應的修改,擴展性並不很好,不符合設計模式的開放封閉原則。
五、應用場景
簡單工廠的應用場景主要是:客戶端並不知道將要創建的實例是什麼時。
例如:
當編寫一款軟件時,後期會對其進行功能模塊拓展,且個模塊屬於不同性質,抽象類並不相同,而此前並不知道今後拓展的模塊怎樣創建,則此時使用簡單工廠模式。