2.2 《硬啃设计模式》 第4章 如何管理全局信息?- 单件模式(Singleton Pattern)
单件模式可能是23种模式中最简单也被说得最多的模式了。
什么情况下可考虑用单件模式呢?
需要一致地管理全局信息时,可考虑用单件模式。
例:
某论坛需要对所有访问者显示当前在线人数、最高在线人数、今天谁生日等全局信息。
论坛很火热,我们不希望每次都要去读
说明:
1.在统一的地方管理全局的信息。
2.这些全局信息供程序其它地方读取,一般情况下是读数据,而不写数据,如果要写数据还需要处理写冲突。
上例中光用单件模式还不能完全解决问题,Singleton类中应该还需要写缓存的代码,将最高在线人数、今日谁生日缓存起来,使程序不必每次去读取数据库。
单件通过在内存中唯一的Singleton保证了数据的唯一,并克服了数据冲突,但如果应用在网络负载均衡环境就会出问题。
在网络负载均衡环境中,有多台服务器跑相同的程序,每台服务器上有一个Singleton,这样就会出问题,在软件设计时需要考虑这样的情况。
在网络负载均衡环境下,程序要避免使用静态变量,对于需要共享的数据可通过统一的状态服务来处理,也就是说专门用一个服务来管理这些全局数据,所有程序从这个服务中取数据,而不要再通过Singleton的静态方法。
请看下一文……
作者:张传波
创新工场创业课堂(敏捷课程)讲师
软件研发管理资深顾问
CMMI首席专家
《火球——UML大战需求分析》作者
《硬啃设计模式》作者
www.umlonline.org创办人