Java Q&A: 使用Singleton模式?给我一个理由先! (转)
Java Q&A: 使用Singleton模式?给我一个理由先!
Q: 在很多地方我都看到使用了Singleton类。我的问题是:较之一个包含static方法(methds)的类,使用Singleton具有什么优点呢?
A: 不使用包含static方法的类而使用Singleton,其区别在于,后者可以带来有效的面向对象设计。Singleton通常展示的是一种更清晰的方法。而一个包含static方法的类只不过是函数或公用子程序(utilities)的简单罗列。
你会问,罗列一组函数有什么问题?
很简单。罗列函数,你就不是在进行面向对象编程;你的工作实际上倒退到了传统的面向过程的程序设计中。悄然之间,对象不再是程序的焦点,而你自己也陷入到以数据为中心的程序设计模式中。换句话说,你不再是向包装了状态和行为的对象发送消息,而是针对数据进行函数调用。公用子程序必然造成行为和数据完全分离,而这一点在面向对象设计中是绝不允许的。
也不是说完全不能使用公用子程序。面向对象的公用子程序确实存在。有时也需要将对象当作数据来处理。例如,我曾写了一套公共子程序,用来将Java对象转换成相应的Corba形式。很难将那些方法写成一个类,因为它们确实没有状态信息;我也不想将转换代码嵌入到Java类中。然而,这确实容易带来混乱。
对于系统中的某个类,如果想让它无论什么时候只有一个实例存在,这种情况下可以使用Singleton。例如有这样一个类,它提供对CORBA server的访问,还要做到负载平衡。这时候就不要使用多个这样的对象,因为每个对象都会和相同的server打交道。占用冗余资源当然浪费。所以,对server的访问最好集中到一个实例之中。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341