原本对设计模式或者Java设计模式一无所知,也暂时没有准备对设计模式做太深 的了解,但是自从接触Singleton设计模式时,我发现,设计模式原来对工作和设计是很有帮助的...
Singleton是单独、独身的意思。在Java程序设计中,经常遇到一个类只允许一个实例存在,在很多操作中,比如建立目录、数据库连接都需要这样的单线程操作。同样,减少了对象的个数,也很大程度的节省了内存。

public class SingletonClass ...{
private SingletonClass()...{
//default
}
private static SingletonClass instance = new SingletonClass();
//这里提供了一个供外部访问本class的静态方法,可以直接访问 
public static SingletonClass getInstance()...{
return instance;
}
public void print()...{
System.out.println("SingletonClass测试");
}
}一个未使用Singleton模式的类:

public class UnSingletonClass ...{
public UnSingletonClass()...{
//default
}
}
public static void main(String[] args) ...{
// TODO 自动生成方法存根
//Singleton类SingletonClass产生的两个对象,比较HashCode;
System.out.println("Singleton类SingletonClass产生的两个对象,比较HashCode");
SingletonClass instance1 = SingletonClass.getInstance();
SingletonClass instance2 = SingletonClass.getInstance();
System.out.println("SingletonClass_1:"+instance1.hashCode());
System.out.println("SingletonClass_2:"+instance2.hashCode());
System.out.println("-------------------------------------");
//非Singleton类UnSingletonClass产生的两个对象,比较HashCode;
System.out.println("非Singleton类UnSingletonClass产生的两个对象,比较HashCode");
UnSingletonClass instance3 = new UnSingletonClass();
UnSingletonClass instance4 = new UnSingletonClass();
System.out.println("UnSingletonClass_1:"+instance3.hashCode());
System.out.println("UnSingletonClass_2:"+instance4.hashCode());
}控制台结果:
Singleton类SingletonClass产生的两个对象,比较HashCode
SingletonClass_1:7051261
SingletonClass_2:7051261
-------------------------------------
非Singleton类UnSingletonClass产生的两个对象,比较HashCode
UnSingletonClass_1:5383406
UnSingletonClass_2:16164678
从上面的HashCode就可以看出两个类的使用效果不同了。
一般Singleton模式通常有几种形式:

public class Singleton ...{

private Singleton()...{}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问 
public static Singleton getInstance() ...{
return instance;
}
} 
public class Singleton ...{
private static Singleton instance = null;

public static synchronized Singleton getInstance() ...{
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例!
if (instance==null)
instance=new Singleton();
return instance;
}
本文介绍了Singleton设计模式的概念及其在Java中的实现方式。通过对比使用与未使用Singleton模式的类实例化结果,展示了Singleton模式如何确保一个类只有一个实例,并提供了全局访问点。
183

被折叠的 条评论
为什么被折叠?



