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创办人
什么情况下可考虑用单件模式呢?
需要一致地管理全局信息时,可考虑用单件模式。
例:
某论坛需要对所有访问者显示当前在线人数、最高在线人数、今天谁生日等全局信息。
论坛很火热,我们不希望每次都要去读数据库,而希望通过一个类来管理这些信息。
你会怎样考虑这个设计?
如果每个访问者进入论坛,论坛程序都要去“运算”一下来获取这些信息,那岂不是要消耗掉大量的性能?
分析:
1.最高在线人数、今日谁生日这些信息,可以在数据库中获取,如果每一次页面刷新都去获取一次,实在是浪费性能。
2.当前在线人数在当前程序运行环境中可以获取,该数字是经常变的,有没有必要每次都重新获取呢?
单件模式的其中一种实现办法:
说明:
1.在统一的地方管理全局的信息。
2.这些全局信息供程序其它地方读取,一般情况下是读数据,而不写数据,如果要写数据还需要处理写冲突。
上例中光用单件模式还不能完全解决问题,Singleton类中应该还需要写缓存的代码,将最高在线人数、今日谁生日缓存起来,使程序不必每次去读取数据库。
单件通过在内存中唯一的Singleton保证了数据的唯一,并克服了数据冲突,但如果应用在网络负载均衡环境就会出问题。
在网络负载均衡环境中,有多台服务器跑相同的程序,每台服务器上有一个Singleton,这样就会出问题,在软件设计时需要考虑这样的情况。
在网络负载均衡环境下,程序要避免使用静态变量,对于需要共享的数据可通过统一的状态服务来处理,也就是说专门用一个服务来管理这些全局数据,所有程序从这个服务中取数据,而不要再通过Singleton的静态方法。
请看下一文……
作者:张传波
创新工场创业课堂(敏捷课程)讲师
软件研发管理资深顾问
CMMI首席专家
《火球——UML大战需求分析》作者
《硬啃设计模式》作者
www.umlonline.org创办人
相关文章推荐
- 全局变量与单件模式
- 微软项目管理[EPM]数据库剖析2:如何取得全局项目中某个大纲代码的列表值
- DATAGUARD维护:从库宕机后如何恢复到管理恢复模式
- Android:如何将位置信息模式默认设置为高精确度
- 《ERP从内部集成起步》读书笔记——第2章 从优化业务流程谈信息集成的必要性 2.1从流程优化的需要理解信息化与管理的关系 2.1.1全局观念和全流程
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统
- (OpenSessionInView模式)spring对session和事务的管理以及OpenSessionInViewFilter是如何工作的
- 如何把握银行信息科技风险管理的“度”?
- 面对海量信息如何进行时间管理
- 手机软件开发管理过程中,如何采用敏捷开发模式
- 程序员该如何管理后宫:怎样哄女孩儿(策略模式)
- 互联网企业如何学习星巴克的管理模式
- 项目管理模式之如何去除SVN标记
- 通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?
- 手机软件开发管理过程中,如何采用敏捷开发模式
- 如何利用“消息集中管控中心”批量管理手机信息
- Android 手机 应用管理 中是如何获取到 应用信息的
- 程序员该如何管理后宫:和女生沟通的艺术(装饰模式)
- 【e医疗原创】如何做好以数字签名为基础的医疗信息安全性管理
- ORACLE 10g RAC SGA自动管理模式下如何固定db buffer cache和shared pool的大小