回調函數和工廠模式可以結合使用,以實現靈活的對象創建和動態行為。這種結合通常用于需要根據特定條件創建對象并在對象上執行某些操作的場景。以下是如何將回調函數與工廠模式結合的示例和解釋。
結合使用的場景
動態對象創建:使用工廠模式創建不同類型的對象。
自定義行為:通過回調函數定義對象的特定行為或操作。
示例代碼
以下是一個結合回調函數和工廠模式的示例:
#include
#include
#include
// 產品接口
class Product {
public:
virtual void use() = 0;
};
// 具體產品
class ConcreteProductA : public Product {
public:
void use() override {
std::cout << “Using Product A” << std::endl;
}
};
class ConcreteProductB : public Product {
public:
void use() override {
std::cout << “Using Product B” << std::endl;
}
};
// 工廠
class Factory {
public:
static std::unique_ptr createProduct(char type) {
if (type == ‘A’) {
return std::make_unique();
} else if (type == ‘B’) {
return std::make_unique();
}
return nullptr;
}
};
// 客戶端代碼
void performAction(char productType, std::function<void(Product*)> callback) {
auto product = Factory::createProduct(productType);
if (product) {
callback(product.get()); // 調用回調函數
} else {
std::cout << “Invalid product type!” << std::endl;
}
}
int main() {
// 使用回調函數定義操作
performAction(‘A’, [](Product* p) {
p->use(); // 使用產品A
});
performAction(‘B’, [](Product* p) {
p->use(); // 使用產品B
});
return 0;
}
Copy
代碼解釋
產品接口和具體產品:
定義了一個 Product 接口和兩個具體實現 ConcreteProductA 和 ConcreteProductB。
工廠類:
Factory 類提供了靜態方法 createProduct,根據傳入的類型創建相應的產品對象。
回調函數:
performAction 函數接受一個產品類型和一個回調函數。它使用工廠模式創建產品,并在創建成功后調用回調函數。
客戶端代碼:
在 main 函數中,調用 performAction 并傳入不同的產品類型和相應的回調函數,以執行特定操作。
優點
靈活性:通過回調函數,客戶端可以定義如何使用創建的對象,而不需要修改工廠或產品的實現。
解耦:工廠模式和回調函數的結合使得對象創建和行為定義分離,增強了代碼的可維護性和可擴展性。