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个月左右.我的惊讶甚至大于惊喜.

小孩儿每天都在成长,做父母最快乐的事情之一,就是看着孩子成长.

成长体现在许多琐碎的小事上,但是有些时候也会出现一些哭笑不得的事情.

如果有时间,我就会和小妞妞一起玩,小孩子天性爱玩嘛!有时候玩累了,我躺在床上就不原意动;但是小妞妞还精力旺盛.她一般会站在旁边对我说:”爸爸起来,爸爸起来”.

我把手伸给她说:”拉我起来”,小妞妞稚嫩的小手握着我的手向上一提,我就会像打了兴奋剂一样再和她疯玩一会.

小妞妞好像慢慢的掌握了规律,只要我说”拉我起来”,她一动作,我马上就起来了;而她说”爸爸起来”,我并一定会起来. 所以她更进一步,不再说”爸爸起来”(好像是她觉得这句话没有作用),而是直接替我说”拉我起来”(这句话的作用是立杆见投影的).

看来她还分不清楚主体和客体,”你我”的发音她会,但是概念的区别对于目前的她还不能够.

看来,小妞妞成长的路,”路漫漫其修远兮,吾将上下而求索”.