前几天C++老师提到在给我们讲解知识的时候用到了单件模式的概念!
今天写出来和大家分享分享!
我的技术还很差,可能文章中会有错误或者不对的地方,希望大家给我指出,帮我改正!
言归正传!
题目是这样的:
创建一个类,是这个类在其作用域内只能有一个实例!
刚开始老师没讲的时候我也实现了这个功能,
我的方法是在类中声明一个静态数据成员(整型),
在类的构造函数里做点手脚!
我是在构造函数里检测一下静态数据成员的值是不是0(初始是0),如果不是0,就直接exit;
第一次建立对象,它的值是0,建立之后就对静态数据成员自加,
这样子就变成1了,下次再建立新对象的时候因为静态数据成员不是0,所以对象不会被创建!
但是我的这个方法缺点很明显,因为实在运行的时候进行判断的,如果用户建立的两个对象那么程序就直接退出了!显然大家不想出现这样的情况!
后来老师给我们讲解了他的方法,我听得似懂非懂,听到他提到了一嘴单件模式,所以我在课后就花了些时间查查资料,总算明白了大概了!
所谓单件模式就是在设计模式中的一个概念,实现上面题目的要求!
它使用的方法:我用一个例子来说明:
在这个类中我们把构造函数放在了private:中,这样子我们在类外就无法直接来利用构造函数建立对象了,我们用在public:中定义了一个个静态函数,注意这里面函数的返回值可是对象的引用,这一点很重要!而且一定要是静态函数(因为我们无法建立对象,所以只能通过类名::+函数()的形式来调用),
如此一来我们只需在main函数里声明一个A类的引用来接受这个f()函数的返回值,比如A& b=A::f();这样子我们就为静态对象a起了一个叫b的别名,一切对b的操作就是对a的操作,以后无论你再声明多少个A类的引用去接收A::f()的返回值,其得到的都是当前状态下的a,因为我们知道静态变量只有在第一次定义初始化的时候,才会分配内存,以后再调f()函数,static A a(“小月”);这条语句都不会被执行,而直接返回当前状态下的a!
我说了这么多,也不知道大家明不明白点,有兴趣的朋友可以查查资料,研究一下,也欢迎大家给我找毛病!