單例模式:透過函數重載提供不同參數的單例實例。工廠模式:透過函數重寫建立不同類型的對象,實現創建過程與特定產品類別的解耦。
C 中函數重載與重寫中單例模式與工廠模式的運用
函數重載
單例模式可以透過函數重載來實現,重載後的函數有不同的參數列表,從而傳回不同的實例。
class Singleton { public: static Singleton* getInstance() { if (instance_ == nullptr) { instance_ = new Singleton(); } return instance_; } static Singleton* getInstance(int arg) { if (instance_ == nullptr) { instance_ = new Singleton(arg); } return instance_; } private: Singleton() = default; Singleton(int arg); static Singleton* instance_; };
實戰案例
建立兩個單例物件:一個帶有參數,一個不帶參數。
int main() { Singleton* instance1 = Singleton::getInstance(); Singleton* instance2 = Singleton::getInstance(10); // 检查两个实例是否相同 if (instance1 == instance2) { std::cout << "两个实例相同" << std::endl; } else { std::cout << "两个实例不相同" << std::endl; } }
函數重寫
#工廠模式可以透過函數重寫來實現,重寫後的函數在子類別中具有不同的實現,從而創建不同的物件。
class Product { public: virtual ~Product() {} }; class ConcreteProductA : public Product { // ... }; class ConcreteProductB : public Product { // ... }; class Factory { public: virtual ~Factory() {} virtual Product* createProduct() = 0; }; class ConcreteFactoryA : public Factory { public: Product* createProduct() override { return new ConcreteProductA(); } }; class ConcreteFactoryB : public Factory { public: Product* createProduct() override { return new ConcreteProductB(); } };
實戰案例
#建立兩個工廠對象,每個物件建立不同的產品類型。
int main() { Factory* factory1 = new ConcreteFactoryA(); Product* product1 = factory1->createProduct(); Factory* factory2 = new ConcreteFactoryB(); Product* product2 = factory2->createProduct(); // 检查两个产品类型是否不同 if (typeid(*product1) != typeid(*product2)) { std::cout << "两个产品类型不同" << std::endl; } else { std::cout << "两个产品类型相同" << std::endl; } }
以上是C++ 函式重載與重寫中單例模式與工廠模式的運用的詳細內容。更多資訊請關注PHP中文網其他相關文章!