您的位置:首页 > 其它

2.2 《硬啃设计模式》 第4章 如何管理全局信息?- 单件模式(Singleton Pattern)

2013-10-24 13:40 363 查看
单件模式可能是23种模式中最简单也被说得最多的模式了。

什么情况下可考虑用单件模式呢?

需要一致地管理全局信息时,可考虑用单件模式。

例:

某论坛需要对所有访问者显示当前在线人数、最高在线人数、今天谁生日等全局信息。

论坛很火热,我们不希望每次都要去读数据库,而希望通过一个类来管理这些信息。

你会怎样考虑这个设计?

如果每个访问者进入论坛,论坛程序都要去“运算”一下来获取这些信息,那岂不是要消耗掉大量的性能?

分析:

1.最高在线人数、今日谁生日这些信息,可以在数据库中获取,如果每一次页面刷新都去获取一次,实在是浪费性能。

2.当前在线人数在当前程序运行环境中可以获取,该数字是经常变的,有没有必要每次都重新获取呢?

单件模式的其中一种实现办法:

 


说明:

1.在统一的地方管理全局的信息。

2.这些全局信息供程序其它地方读取,一般情况下是读数据,而不写数据,如果要写数据还需要处理写冲突。

上例中光用单件模式还不能完全解决问题,Singleton类中应该还需要写缓存的代码,将最高在线人数、今日谁生日缓存起来,使程序不必每次去读取数据库。

单件通过在内存中唯一的Singleton保证了数据的唯一,并克服了数据冲突,但如果应用在网络负载均衡环境就会出问题。

在网络负载均衡环境中,有多台服务器跑相同的程序,每台服务器上有一个Singleton,这样就会出问题,在软件设计时需要考虑这样的情况。

在网络负载均衡环境下,程序要避免使用静态变量,对于需要共享的数据可通过统一的状态服务来处理,也就是说专门用一个服务来管理这些全局数据,所有程序从这个服务中取数据,而不要再通过Singleton的静态方法。

 

 

请看下一文……
 
 
 

作者:张传波

创新工场创业课堂(敏捷课程)讲师

软件研发管理资深顾问

CMMI首席专家

《火球——UML大战需求分析》作者

《硬啃设计模式》作者

www.umlonline.org创办人

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐