单例模式:通过函数重载提供不同参数的单例实例。工厂模式:通过函数重写创建不同类型的对象,实现创建过程与具体产品类的解耦。

C++ 中函数重载和重写中单例模式与工厂模式的运用
单例模式
函数重载
单例模式可以通过函数重载来实现,重载后的函数具有不同的参数列表,从而返回不同的实例。
立即学习“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++ 函数重载和重写中单例模式与工厂模式的运用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1447465.html
微信扫一扫
支付宝扫一扫