单例模式(定制一个计时器)
实现如下:上面的单例模式的实现要求我们如下方式使用类Singleton
class Singleton{public:static Singleton* Instance(); void DoSomeThing();protected:Singleton():totle(0.0){};private:static Singleton* instance_;};Singleton* Singleton::instance_=0;Singleton* Singleton::Instance(){if (instance_==0){instance_=new Singleton();}return instance_;}
我们可能像这样使用这个类的对象Singleton* p=Singleton::Instance();p->DoSomeThing();
由于它没有共用的构造函数,所以只能使用Instance方法获取,而这个方法总是判断是否已经创建了唯一的对象,如果已经创建,就直接使用。否则就创建一个。其唯一的构造函数不是public的,但可以被类内部调用,并且初始化了用来标记创建对象个数的instance_指针。
有时候我的程序需要一个用来方便计时的东西,我就用单例模式实现了,它可以告诉你在每两次调用之间花了多长时间,而且还随时告诉你从一开始运行到现在一共用了多少时间。另外它还支持,每次显示时间的时候打印一些说明性的文字,而这些只需要在一次调用就可以完成。是不是很棒呢?其实现如下:
class SingletonTimer{public:static SingletonTimer* Instance();void print(const string& out) {double temp=timer_.elapsed();totle+=temp;cout<<out<<" 用时:"<<temp<<"秒,目前共用时:"<<totle<<"秒"<<endl;timer_.restart();}protected:SingletonTimer():totle(0.0){};private:static SingletonTimer* instance_;timer timer_;double totle;};SingletonTimer* SingletonTimer::instance_=0;SingletonTimer* SingletonTimer::Instance(){if (instance_==0){instance_=new SingletonTimer();}return instance_;}