`
步行者
  • 浏览: 167715 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

为什么需要Singleton

阅读更多

为什么需要 单例设计模式(Singleton)?

像下面的一个单例

 

public class Singleton {
	private static Singleton instance = null;
	private Singleton(){};
	public static synchronized Singleton getInstance(){
		if(instance == null)
			instance = new Singleton();
		return instance;
	}
	public void doSomething(){
		//do something
	}
}


它要实现的主要目标,就是在一个应用中只维护一个Singleton实例

但一个类在一个应用中也是唯一的,为什么不能直接以类作为单例呢?

 

public final class AnotherSingleton{
	private AnotherSingleton(){}
	public static synchronized void doSomething(){
		//do something
	}
}

 

把类的所有方法都改为静态方法,

所有属性都改为静态属性(我们可以把

静态属性看成类的内部状态),

但是不允许实例化,

对类的操作相当于对单例的操作

而且类也可以维护内部状态(通过静态私有属性)

这完全满足了单例的要求。

不知道为什么需要单例模式。。。


因为我想不出来在什么情况下 单例可以满足需求

而 类 不能。

 

 

 

分享到:
评论
6 楼 kaka11 2009-06-07  
至于静态方法的话,是会限制了多态,所以很多情况在oo编程中它是不被用的,除非你确定你的类完全不需要,不可能使用到多态,比如像工具类,或者像active record里面的那些find方法,很多时候技术并没有对错,只是适合不适合和你是否需要一些oo的灵活性了。
5 楼 kaka11 2009-06-07  
楼主的想法近似于MonoState模式,将所有的实例变量变成静态的,从而保证对这些变量所带来的行为进行强制单一性。
而Singleton是通过强制结构上的单一性,防止创建出多个对象实例。
这两种模式在bob martin的敏捷软件开发一书有一章曾经介绍过,楼主可以查阅该章节。
这两种方法各有千秋,不过综合来说Singleton的灵活性更大一点。
4 楼 fjlyxx 2009-06-07  
将类定义为final吧
3 楼 步行者 2009-06-07  
wendong007 写道
什么都写成静态的,你干嘛不用C

C 的好特性 当然值得借鉴
java 的语法就是类 C 的

如果只有静态方法,那确实是面向过程
但类也可以有状态(静态属性)
所以我们
也可以把一个JAVA类当成一个对象
一个全局唯一的对象
这不就是Singleton吗
不过从表面上看他不是实例,而是一个类。。
2 楼 wendong007 2009-06-07  
什么都写成静态的,你干嘛不用C
1 楼 303535576 2009-06-07  
确实 ,
好像单例的特性都可以通过类的静态方法和静态属性实现。

相关推荐

Global site tag (gtag.js) - Google Analytics