设计模式单例模式
Posted zhaocx111222333
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式单例模式相关的知识,希望对你有一定的参考价值。
懒汉模式:
#include<iostream>
#include<mutex>
using namespace std;
class fullsingleClass {
public:
static int* get()
{//双重锁模式
if (_data == nullptr)
{//先判断是否为空,如果为空则进入,不为空说明已经存在实例,直接返回
//进入后加锁
my_mutex.lock();
if (_data == nullptr)
{//再判断一次,确保不会因为加锁期间多个线程同时进入
_data = new int();
}
my_mutex.unlock();//解锁
}
cout << _data << endl;
return _data;
}
private:
static int* _data;
static mutex my_mutex;//锁
fullsingleClass(){}
};
int* fullsingleClass::_data = nullptr;//先定义一个空指针,需要的时候再去给数据
mutex fullsingleClass::my_mutex;//类外初始化
int main()
{
//fullsingleClass f3;//无法实例化对象
int* f1 = fullsingleClass::get();
int* f2 = fullsingleClass::get();
system("pause");
return 0;
}
饿汉模式:
#include<iostream>
using namespace std;
//单例模式:构造函数私有化,对外提供一个接口
class hungrysingleClass {
public:
static int* get()//静态成员函数可以通过类域访问和实例化对象访问
{
cout << _data<<endl;
return _data;
}
void Print(){//非静态成员函数必须通过实例化对象访问
cout << "print" << endl;
}
private:
static int* _data;
hungrysingleClass() {}
};
int* hungrysingleClass::_data = new int();
class A{
private:
int a;
public:
void funa(){
cout << "funa" << endl;
}
};
int main()
{
//饿汉模式
A a1;//正常类可以完成初始化和执行
a1.funa();
//hungrysingleClass h1;//构造函数私有化无法创建对象
//h1.Print();//更别说执行
int* t1 = hungrysingleClass::get();
int* t2 = hungrysingleClass::get();
//int* ehsinglep5 = ehsingleClass::print();//非静态成员函数不可用类域访问
system("pause");
return 0;
}
以上是关于设计模式单例模式的主要内容,如果未能解决你的问题,请参考以下文章