What is the difference between static class and singleton class desgin pattern?
Possible Duplicate:
Difference between static class and singleton pattern?
我无法理解静态类和单例类的区别。
在单吨类中,我们确保只创建一个对象,而不创建更多对象。
在静态类中,也不需要创建对象,我们可以直接使用静态类名调用属性和方法。
这里两个看起来都一样,所以使用创建单吨类有什么用。
在这方面有任何帮助都是很好的。
对于单例实例,我们可以确保只创建类(对象)的一个实例。当对象的创建成本很高,并且只需要一个对象时,这是非常有用的。
另一方面,静态类不能有已创建类的实例。当方法不低于给定对象,而是作用于现有对象时,这是适当的。
在静态类中,没有对象。直接调用静态类上的方法。
然而,在singleton中,有一个对象,它只能有一个实例。
singleton在条件创建资源密集型对象时很有用。对于ex,您的应用程序可能需要连接到远程数据库。您可能希望将其设置为singleton,以限制连接的数量,并确保仅在需要时创建。
静态类和方法更像实用函数,可以在需要时调用。
首先,让我们看一个例子来解释静态/实例(代码在AS3中,但在任何语言中都是相同的原理)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
您有两个blob类实例,每次都创建i var。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
您也有两个staticblob类的实例,但是i var只创建一次,并且所有实例都"保存在内存中"。
现在更容易理解singleton。singletongarantes使您只有一个类实例(因为它使用静态属性来保留实例的引用并返回它)。因此,它可以用于一次声明一个对象(例如,如果您的对象消耗了太多的资源来创建)
很明显,区别在于,一方面,您在静态上下文中工作,另一方面,您处理的是普通对象实例。我要说的是,这一点的主要后果是,由于静态成员不是继承的,静态类不能从继承或多态性中受益,而单例可以从中受益。通过在静态上下文中工作,你将失去很多Java的对象定向。
单例类与静态类非常不同,因为单例类可以包含静态和非静态成员/属性/方法。
因此,单例对象可以像普通的非静态对象一样保持信息/状态。最重要的是,singleton被设计成线程安全的,也就是说它有一个同步根对象(通常),可以用来阻止试图执行相同操作的线程。
静态类只能包含静态成员/属性/成员,因此无法维护线程安全,因此无法锁定静态对象。