什么是设计 模式
模式:套路 -----> 写代码的习惯
设计模式:前人总结具有代表性套路的模式
官方说法:它是一套被反复使用,多数人知晓,经过分类编目的,
代码设计经验的总结。
设计模式的究极目标:通过增加的形式去减少因为变化而要修改源码的问题(维护问题)
单例设计模式
什么是单例设计模式
保证整个类的使用只有一个对象
例如:
1.多线程网络资源初始化
2.回收站机制
3.任务管理器
4.日志管理
如何实现单例设计模式
1.构造函数私有化
2.提供一个全局的静态方法,访问唯一对象
3.类中定义一个静态指针,指向唯一对象
单例设计模式的实现
有2种方式
1.懒汉式
2.饿汉式
懒汉式
在类中创建一个对象
//单例设计模式 #include<iostream> #include<string> using namespace std; class singleton { public: //类中定义一个静态指针,指向唯一对象 static singleton* m_singleton; //提供一个全局的静态方法,访问唯一对象 static singleton* get() { if (m_singleton == NULL) { m_singleton = new singleton; return m_singleton; } } private: singleton() { cout << "构造对象" << endl; m_singleton = nullptr; } }; singleton* singleton :: m_singleton = nullptr; //静态成员需要类外初始化 int main() { singleton* p1 = singleton::get(); //静态成员的访问,不需要对象,但是要加类名限定 cout << "p1 = " << p1 << endl; singleton* p2 = singleton::get(); cout << "p2 = " << p2 << endl; singleton* p3 = singleton::get(); cout << "p3 = " << p3 << endl; return 0; }
如果所示,p2与p3的地址是一样的,单例设计模式只有唯一的一个对象
但其实按理说我觉得3个的地址都应该一样
可能是我写错了,或者说对这单例设计模式还有不知道的细节,先暂时就这样
饿汉式
饥不择食,不管用不用,在全局中创建一个对象
饿汉式跟懒汉式的代码区别不大
#include<iostream> #include<string> using namespace std; class singleton { public: //类中定义一个静态指针,指向唯一对象 static singleton* m_singleton; //提供一个全局的静态方法,访问唯一对象 static singleton* get() { return m_singleton; } private: singleton() { cout << "构造对象" << endl; m_singleton = nullptr; } }; singleton* singleton::m_singleton = new singleton; int main() { singleton* p1 = singleton::get(); //静态成员的访问,不需要对象,但是要加类名限定 cout << "p1 = " << p1 << endl; singleton* p2 = singleton::get(); cout << "p2 = " << p2 << endl; singleton* p3 = singleton::get(); cout << "p3 = " << p3 << endl; return 0; }
当然这里饿汉式就正常了,三个地址一样,说明单例设计模式,只能有一个唯一对象
单例设计模式的优缺点
优点:
1.内存只有一个对象,节省内存空间
2.避免频繁创建和销毁对象,提高性能
3.避免对共享的资源多重占用,简化访问
缺点:
1.不适合变化频繁的对象
2.长时间不使用对象,导致系统回收掉