单例模式
- 单例模式:确保一个类只有一个实例,并提供一个全局访问点
- 单例模式不一定适合设计进入一个库中。
- 确定性能和资源上的限制,然后小心地选择适当的方案来实现单件,在多线程程序中,对于调用单例模式,需要加锁,以解决多线程的问题。
例子
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RJGjvv31-1662710329230)(img/singinstance.png)]](https://i-blog.csdnimg.cn/blog_migrate/04ef72de2bd61963bdfd0c69ea574464.png)
class ChocolateBoiler{
public:
static ChocolateBoiler* getInstance(){
if(pointer==nullptr){
pointer=new ChocolateBoiler;
}
return pointer;
}
void fill(){
if(isEmpty()){
cout<<" start fill"<<endl;
empty=false;
boiled=false;
}
}
void drain(){
if(!isEmpty()&&isBoiled()){
cout<<" start drain"<<endl;
boiled=false;
empty=true;
}
}
void boil(){
if(!isEmpty()&&!isBoiled()){
cout<<" start boil"<<endl;
boiled=true;
}
}
private:
ChocolateBoiler():empty(true),boiled(false){
};
bool empty;
bool boiled;
static ChocolateBoiler* pointer;
bool isEmpty(){
return empty;
}
bool isBoiled(){
return boiled;
}
};
ChocolateBoiler* ChocolateBoiler::pointer = nullptr;
int main(){
ChocolateBoiler::getInstance()->fill();//开始装
ChocolateBoiler::getInstance()->boil();//开始煮
ChocolateBoiler::getInstance()->drain();//开始排
cout<<endl;
ChocolateBoiler::getInstance()->fill();
ChocolateBoiler::getInstance()->boil();
ChocolateBoiler::getInstance()->drain();
system("pause");
return 0;
}