单例模式是一种常见的软件设计模式。
如果把《乡村爱情故事》看做是一个程序(进程),永强和王大拿可以看成两个类。
在第一集需要永强出场,唱一首开场曲。然后第二集的时候,又需要永强出来打个酱油。
那么在这两次中,一般情况下是需要构建两次对象,然后调用永强的方法,这种方式的缺点是臃肿与增加开销、增加内存泄露的机会。
单例模式为我们提供了一种非常棒的方式实现,在故事一开始的时候,就生成永强王大拿两个实例,然后在别处用到了,直接调用其方法就行了,并不需要再新建对象。以下为C++实现代码:
#ifndef SINGLEINSTANCE_SINGINSTANCE_H
#define SINGLEINSTANCE_SINGINSTANCE_H
#include "iostream"
class YongQiang {
private:
YongQiang(){
std::cout << "YongQiang Is Ready\n";
}
static YongQiang* instance;
public:
static YongQiang* callYongQiang() {
return instance;
}
void sing_a_song() {
std::cout << "Wo De Jia Xiang Zai Dong Bei\n";
}
};
#endif //SINGLEINSTANCE_SINGINSTANCE_H
首先在.h文件中定义一个YongQiang的类,在私有函数中,定义其构造函数以及静态成员变量。然后定义一个获得YongQiang指针的公开函数,最后定义YongQiang表演的公开函数。
#include "SingInstance.h"
YongQiang* YongQiang::instance = new YongQiang();
在.cpp文件中,直接对永强进行生成操作。
int main() {
YongQiang::callYongQiang()->sing_a_song();
return 0;
}
在Main函数中,直接调用YongQiong的方法即可,不需要在每一处调用永强方法的时候,对永强进行维护。
以上代码输出:
YongQiang Is Ready
Wo De Jia Xiang Zai Dong Bei
可见,对于一个工程中的工具类与模块类,只需要在整个程序中实例化一次的,即可利用单例模式。
以上单例模式为最简单形式,具体可以使用以下参考中的第二种:
https://blog.csdn.net/u011718663/article/details/115922357