Maison >développement back-end >C++ >L'application du mode singleton et du mode usine dans la surcharge et la réécriture de fonctions C++
Mode Singleton : fournissez des instances singleton avec différents paramètres grâce à la surcharge de fonctions. Modèle d'usine : créez différents types d'objets grâce à la réécriture de fonctions pour dissocier le processus de création des classes de produits spécifiques. L'application du mode singleton et du mode usine dans la surcharge et la réécriture de fonctions en C++ La fonction chargée a une liste de paramètres différente et renvoie donc une instance différente.
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_; };
Cas pratique
Créez deux objets singleton : un avec paramètres et un sans paramètres.
int main() { Singleton* instance1 = Singleton::getInstance(); Singleton* instance2 = Singleton::getInstance(10); // 检查两个实例是否相同 if (instance1 == instance2) { std::cout << "两个实例相同" << std::endl; } else { std::cout << "两个实例不相同" << std::endl; } }Factory Pattern
Function Overriding
Factory Pattern peut être implémenté via la réécriture de fonction. La fonction réécrite a différentes implémentations dans les sous-classes, créant ainsi différents objets.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(); } };
Cas pratique
Créez deux objets d'usine, chaque objet crée un type de produit différent.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; } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!