Zade's Weblog
程序人生
Monthly Archives: 9月 2011
单键模式的一种特殊实现
在设计模式中,单键模式是最简单的一种.我原来以为这种简单的模式使用的场景不会太多.但是实际经验告诉我,使用的非常多,几乎在我经手的每个项目中都使用了这个模式.
这个模式的具体实现有几种:
class Singleton{ private: Singleton(); static Singleton inst; public: static Singleton& instance(){ return inst; } }; |
class Singleton{ private: Singleton(); public: static Singleton& instance(){ static Singleton inst; return inst; } }; |
class Singleton{ private: Singleton(); static Singleton *inst; public: static Singleton& instance(){ if(inst == NULL){ inst = new Singleton(); } return *inst; } }; |
可能还有其他的模式,不再枚举了.
这几种实现有一个共同的特点,即这个单件对象是被动创建的,或者在静态存储区,或者在堆上.为什么不由使用者主动创建呢?
当然,使用者可能主动创建多个,在这种情况下,我们可以采用一些方法避免这个.主动创建的好处是:使用者控制这个对象是创建在栈上还是堆上.例如:
class Singleton{
static Singleton *inst;
public:
Singleton(){
if(inst != NULL){
std::cout << “can’t create more than once”;
abort();
}
inst = this;
}
static Singleton* instance(){
return inst;
}
};
void func()
{
Singleton::instance()->func();
}
int main(){
Singleton myinst;
func();
}
这样用存在一定的风险,但是也有好处.只要个把握住就好
谢谢爸爸和拉我起来
大约一个星期以前的一个周末,吃中午饭的时候,小妞妞坐在我的斜对面(有她专门的座椅),和我们一起吃饭.吃到一半的时候,小妞妞说:”我要喝水”. 水杯在她的对面,我正好顺手,就拿起来递给了她.她很清楚的对我说了一声:”谢谢爸爸”.
所谓天伦之乐,不过如此.
虽然小妞妞很早就会说话,但是说话的内容能够和说话的场景对应起来,我还是第一次明显的感觉到,毕竟小妞妞才20个月左右.我的惊讶甚至大于惊喜.
小孩儿每天都在成长,做父母最快乐的事情之一,就是看着孩子成长.
成长体现在许多琐碎的小事上,但是有些时候也会出现一些哭笑不得的事情.
如果有时间,我就会和小妞妞一起玩,小孩子天性爱玩嘛!有时候玩累了,我躺在床上就不原意动;但是小妞妞还精力旺盛.她一般会站在旁边对我说:”爸爸起来,爸爸起来”.
我把手伸给她说:”拉我起来”,小妞妞稚嫩的小手握着我的手向上一提,我就会像打了兴奋剂一样再和她疯玩一会.
小妞妞好像慢慢的掌握了规律,只要我说”拉我起来”,她一动作,我马上就起来了;而她说”爸爸起来”,我并一定会起来. 所以她更进一步,不再说”爸爸起来”(好像是她觉得这句话没有作用),而是直接替我说”拉我起来”(这句话的作用是立杆见投影的).
看来她还分不清楚主体和客体,”你我”的发音她会,但是概念的区别对于目前的她还不能够.
看来,小妞妞成长的路,”路漫漫其修远兮,吾将上下而求索”.