简单工厂模式
简单工厂模式就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。不需要管它内部的具体实现,只要告诉它你的需求即可,就可以在不同条件下创建不同实例。
优点:
- 工厂类含有必要的判断逻辑,知道时候创建什么样的实例,客户端可以直接不用管,仅仅“消费”产品。
- 客户端无须知道内部具体实现,只需要知道参数即可
- 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性
缺点:
- 不易拓展,如果添加新的产品类型,就得改变工厂的创建逻辑,不符合开闭原则;
- 产品类型较多时,工厂的创建逻辑可能过于复杂,一旦出错,所有产品可能都创建失败,不利于系统的维护
#include <bits/stdc++.h> using namespace std; class pen{ public: virtual int write() = 0; }; class pencil : public pen{ public: int write() { cout << "i am a pencil" << endl; } }; class brush : public pen{ public: int write() { cout << "i ams a brush" << endl; } }; class factory{ public: static pen* CreatePen(string name) { if(name == "pencil") { return new pencil(); } else if(name == "brush") { return new brush(); } } }; int main() { pen* p = factory::CreatePen("pencil"); p->write(); delete p; p = factory::CreatePen("brush"); p->write(); delete p; return 0; }
单例模式
在应用这个模式时,单例对象的类必须保证只有一个实例存在,整个系统只能使用一个对象实例。
优点:不会频繁地创建和销毁对象,节省系统资源。
使用场景:IO 、数据库连接、Redis 连接等。
#include <bits/stdc++.h> using namespace std; // 懒汉式,只有在使用到的时候才会构造 class Singleton{ public: static Singleton* getInstance() { if(singleton == NULL) singleton = new Singleton(); return singleton; } private:
Singleton(){} static Singleton* singleton; }; // 静态成员在类外初始化 Singleton* Singleton::singleton = NULL; int main() { Singleton* p = Singleton::getInstance(); return 0; }
#include <bits/stdc++.h> using namespace std; // 饿汉式,类一旦加载就创建实例 class Singleton{ public: static Singleton* getInstance() { return singleton; } private: Singleton(){} static Singleton* singleton; }; // 静态成员在类外初始化 Singleton* Singleton::singleton = new Singleton(); int main() { Singleton* p = Singleton::getInstance(); return 0; }
标签:Singleton,return,创建,singleton,C++,实例,设计模式,public From: https://www.cnblogs.com/WTSRUVF/p/16796328.html