您的位置:首页 > 其它

单例模式

2016-01-08 14:06 69 查看
目的:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

有些对象我们只需要一个,比如:配置文件,工具类,线程池,缓存,日志对象等,

如果创建出多个示列,就会导致许多问题,比如占用过多资源,不一致的结果等

方式一

Singleton.java

Package com.zj;
/*
* 单例模式Singleton
* 应用场合:用些对象只需要一个就足够了,如国代帝王,真•老婆
* 作用:保证整个应用中某个实例只有一个
*/
public class Singleton {
//1,将构造方法私有化,不允许外部直接创建对象
Private Singleton(){
}
//2,创建类的唯一实例,  private static 类的私有的静态成员,当调用这个类时会马上创建一个对象
private static Singleton instance = new Singleton();
//3,提供一个用于获取实例的方法,public static 修饰
public static Singleton getInstance(){
return instance;
}
}


Test.java

Package con.zj;

public class Test {
public static void main(String[] args){
Singleton s1 = Singleton. getInstance();
Singleton s2 = Singleton. getInstance();
If(s1==s2){
System.out.println(“s1和s2 是同一个实例”);
} else {
System.out.println(“s1和s2不是同一个实例”);
}
//执行结果为:s1和s2 是同一个实例
}
}


方式二

Singleton.java

Package com.zj;

public class Singleton {
//1,将构造方法私有化,不允许外部直接创建对象
Private Singleton(){
}
//2,创建类的唯一实例,  private static 类的私有的静态成员
//这里并没有马上创建一个实例
private static Singleton instance;
//3,提供一个用于获取实例的方法,public static 修饰
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
return instance;
} else {
return instance;
}
}
}


Test.java

Package con.zj;

public class Test {
public static void main(String[] args){
Singleton s1 = Singleton. getInstance();
Singleton s2 = Singleton. getInstance();
If(s1==s2){
System.out.println(“s1和s2 是同一个实例”);
} else {
System.out.println(“s1和s2不是同一个实例”);
}
//执行结果为:s1和s2 是同一个实例
}
}


两种方式的区别:

方式一的特点是加载类时比较慢,但运行时获取对象的速度比较快,因为在使用时对象已经加载完成

方式二的特点是加载类时比较快,但运行时获取对象的速度比较慢,因为在使用时类才会去获取对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: