我对Singleton设计模式的看法:
1. Singleton设计模式保证一个application中就至多只有一个instance, 注意这里界定的是一个application, 而不是一个System.如果不是一个application的话,就不能够保证了。例如:在分布式环境下,虽然单服务器端实现了Singleton,但是多服务器端(System)就有可能不能保证是Singelton。
保证application中实现该模式的Singleton 类至多只有一个instance, 可以在一定范围内更好地确定业务逻辑, 尤其是那些保证现实 生活 中application中只有一个的概念。例如前面说的 数据库连接池就是一个典型;
2. Singleton设计模式并不能保证节省资源,这是一点需要澄清的。如果要节省资源,大可不必使用Singleton设计模式,Singleton的设计目标并不是为了节省资源,而且为了保证全局性的逻辑统一;
3. Singleton设计模式与其他设计模式(如 Factory设计模式)的联合使用基本上已经成为了一种“普遍”的技巧,对Singleton的熟悉可以帮助我们在理解他人工作上和相互交流上带来方便。
4. Singleton设计模式的例子:
Singleton设计模式依据设计方法的不同,一般有两种方法,这里面涉及到一个"delay initialization"的 问题 ,但基本的原理是一样的。下面分别给出例子:
/**
@(#)SampleManager.java
*/
package org.quickpoint.SingletonSample;
/**
<code>SampleManager</code> is a sample displaying usage of singleton design pattern.
This is pre initialized implementation.
@author quickpoint
@version 1.0 02/25/2005
*/
public class SampleManager
{
/** Only one instance( pre initialized )*/
private static SampleManager instance = new SampleManager();
/** Constructor
In a private domain to ensure that could not be initialized by outter.
*/
private SampleManager()
{
System.out.println("This is a sample manager.");
}
public synchronized static SampleManager getInstance()
{
return instance;
}
// Display how to use
public static void main( String[] args )
{
SampleManager manager = SampleManager.getInstance();
}
}
----------------------------------------------
/**
@(#)SampleManager.java
*/
package org.quickpoint.SingletonSample;
/**
<code>SampleManager</code> is a sample displaying usage of singleton design
pattern.
This is lazy initialized implementation.
@author quickpoint
@version 1.0 02/25/2005
*/
public class SampleManager
{
/** Only one instance( pre initialized )*/
private static SampleManager instance = null;
/** Constructor
In a private domain to ensure that could not be initialized by outter.
*/
private SampleManager()
{
System.out.println("This is a sample manager.");
}
public synchronized static SampleManager getInstance()
{
if( null == instance )
{
instance = new SampleManager();
}
return instance;
}
// Display how to use
public static void main( String[] args )
{
SampleManager manager = SampleManager.getInstance();
}
}
------------------------------------------------
附加说明
Singleton设计模式设计时的要点在于:
1:要有一个该类的instance作为class member, 如例子中的 instance(也可以取另外的名字), 但不必一开始就实例化,可以使用lazy intialize 技术;
2: 把类的constructor设为private,以防止外部类调用;
3: 实现对instance的调用,如例子中的 getInstance()方法, 至于是否要synchronize, 就要看所在的application中是否有multi thread 操作 了。我一般加上synchronize
建议参考
<<thinking in Java pattern>>
<<Desing pattern>> of GoF
<<Java Design Pattern>>这本书有3种, 一种是阎宏的, 一种是Cooper的, 还有一种记不起来作者了。
1. Singleton设计模式保证一个application中就至多只有一个instance, 注意这里界定的是一个application, 而不是一个System.如果不是一个application的话,就不能够保证了。例如:在分布式环境下,虽然单服务器端实现了Singleton,但是多服务器端(System)就有可能不能保证是Singelton。
保证application中实现该模式的Singleton 类至多只有一个instance, 可以在一定范围内更好地确定业务逻辑, 尤其是那些保证现实 生活 中application中只有一个的概念。例如前面说的 数据库连接池就是一个典型;
2. Singleton设计模式并不能保证节省资源,这是一点需要澄清的。如果要节省资源,大可不必使用Singleton设计模式,Singleton的设计目标并不是为了节省资源,而且为了保证全局性的逻辑统一;
3. Singleton设计模式与其他设计模式(如 Factory设计模式)的联合使用基本上已经成为了一种“普遍”的技巧,对Singleton的熟悉可以帮助我们在理解他人工作上和相互交流上带来方便。
4. Singleton设计模式的例子:
Singleton设计模式依据设计方法的不同,一般有两种方法,这里面涉及到一个"delay initialization"的 问题 ,但基本的原理是一样的。下面分别给出例子:
/**
@(#)SampleManager.java
*/
package org.quickpoint.SingletonSample;
/**
<code>SampleManager</code> is a sample displaying usage of singleton design pattern.
This is pre initialized implementation.
@author quickpoint
@version 1.0 02/25/2005
*/
public class SampleManager
{
/** Only one instance( pre initialized )*/
private static SampleManager instance = new SampleManager();
/** Constructor
In a private domain to ensure that could not be initialized by outter.
*/
private SampleManager()
{
System.out.println("This is a sample manager.");
}
public synchronized static SampleManager getInstance()
{
return instance;
}
// Display how to use
public static void main( String[] args )
{
SampleManager manager = SampleManager.getInstance();
}
}
----------------------------------------------
/**
@(#)SampleManager.java
*/
package org.quickpoint.SingletonSample;
/**
<code>SampleManager</code> is a sample displaying usage of singleton design
pattern.
This is lazy initialized implementation.
@author quickpoint
@version 1.0 02/25/2005
*/
public class SampleManager
{
/** Only one instance( pre initialized )*/
private static SampleManager instance = null;
/** Constructor
In a private domain to ensure that could not be initialized by outter.
*/
private SampleManager()
{
System.out.println("This is a sample manager.");
}
public synchronized static SampleManager getInstance()
{
if( null == instance )
{
instance = new SampleManager();
}
return instance;
}
// Display how to use
public static void main( String[] args )
{
SampleManager manager = SampleManager.getInstance();
}
}
------------------------------------------------
附加说明
Singleton设计模式设计时的要点在于:
1:要有一个该类的instance作为class member, 如例子中的 instance(也可以取另外的名字), 但不必一开始就实例化,可以使用lazy intialize 技术;
2: 把类的constructor设为private,以防止外部类调用;
3: 实现对instance的调用,如例子中的 getInstance()方法, 至于是否要synchronize, 就要看所在的application中是否有multi thread 操作 了。我一般加上synchronize
建议参考
<<thinking in Java pattern>>
<<Desing pattern>> of GoF
<<Java Design Pattern>>这本书有3种, 一种是阎宏的, 一种是Cooper的, 还有一种记不起来作者了。