一、什麼是工廠模式
工廠模式是一種創建型設計模式,它提供了一個通用的接口來創建對象,而不需要直接指定他們的具體類。在軟件開發中,我們經常會遇到需要創建複雜對象的情況,對於這個問題,我們可以使用工廠模式來實現。工廠模式有三個重要的角色:工廠接口、具體工廠和產品接口。其中,工廠接口定義了工廠的統一操作,具體工廠實現了工廠的接口,用來創建產品的實例,而產品接口則定義了所創建的對象的共同接口。
二、工廠模式的實現
工廠模式分為兩類:簡單工廠模式和工廠方法模式。簡單工廠模式使用一個類來封裝對象的創建過程,而工廠方法模式則使用抽象工廠接口和實現該接口的具體工廠來創建對象。
三、簡單工廠模式
簡單工廠模式又稱為靜態工廠方法模式,它通過一個工廠類來創建不同類型的對象,該類提供靜態方法用來創建對象。其實現方式如下:
class Operation {
public:
virtual double getResult(double num1, double num2) = 0;
};
class Add : public Operation {
public:
double getResult(double num1, double num2) {
return num1 + num2;
}
};
class Sub : public Operation {
public:
double getResult(double num1, double num2) {
return num1 - num2;
}
};
class Mul : public Operation {
public:
double getResult(double num1, double num2) {
return num1 * num2;
}
};
class Div : public Operation {
public:
double getResult(double num1, double num2) {
if (num2 == 0) {
throw runtime_error("除數不能為0");
}
return num1 / num2;
}
};
class OperationFactory {
public:
static Operation* createOperation(char op) {
Operation* oper = nullptr;
switch (op) {
case '+':
oper = new Add();
break;
case '-':
oper = new Sub();
break;
case '*':
oper = new Mul();
break;
case '/':
oper = new Div();
break;
default:
throw runtime_error("不支持的運算符");
}
return oper;
}
};
int main() {
Operation* oper = nullptr;
oper = OperationFactory::createOperation('+');
double result = oper->getResult(1, 2);
cout << result << endl;
delete oper;
oper = nullptr;
return 0;
}
在上述代碼中,我們通過Operation工廠類來創建Add、Sub、Mul、Div等不同類型的對象。通過向OperationFactory::createOperation方法傳入運算符,來創建相應的對象。
四、工廠方法模式
工廠方法模式是在簡單工廠模式的基礎之上演化而來的。工廠方法模式定義了一個抽象工廠接口,每個具體工廠都是這個抽象工廠接口的子類。在工廠方法模式中,每個具體工廠只負責創建一個產品,它通過實現工廠接口中的方法,來創建具體的產品。
class Factory {
public:
virtual Product* createProduct() = 0;
};
class FactoryA : public Factory {
public:
Product* createProduct() {
return new ProductA();
}
};
class FactoryB : public Factory {
public:
Product* createProduct() {
return new ProductB();
}
};
int main() {
Factory* factory = nullptr;
Product* product = nullptr;
factory = new FactoryA();
product = factory->createProduct();
product->use();
delete factory;
delete product;
factory = nullptr;
product = nullptr;
factory = new FactoryB();
product = factory->createProduct();
product->use();
delete factory;
delete product;
factory = nullptr;
product = nullptr;
return 0;
}
在上述代碼中,Factory是一個抽象類,它定義了一個用於創建產品對象的createProduct方法。FactoryA和FactoryB則是Factory的子類,它們分別實現了createProduct方法,用於創建ProductA和ProductB對象。
五、總結
工廠模式是一種常用的設計模式,它將對象的創建過程封裝起來,使得程序的拓展性更好,代碼更加簡潔清晰,使用起來也更加方便。在實際的編碼過程中,我們可根據具體的業務需求,選擇合適的工廠模式進行應用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/295355.html
微信掃一掃
支付寶掃一掃