您的位置:首页 > 其它

单例模式

2016-05-15 12:29 260 查看
问题描述:设计单例模式的实现。

分析:单例模式,即要求在整个程序中,某个类有且只有一个实例对象。因为在有些时候,我们只需要类有一个对象就行,这个时候我们就可以把这个类采用单例模式实现,

例如系统的一些对象,比如时间等对象就可以设计为单例模式。

常见的单例模式有两种类型:饿汉模式和懒汉模式。具体区别如下:

饿汉模式:加载类时比较慢(因为要创建对象),运行时获取对象的速度比较快,线程安全

懒汉模式:加载类时比较快(因为不用创建对象),运行时获取对象的速度比较慢,线程不安全

为了便于读者理解,我写出了如下Java代码,分别实现了饿汉模式和懒汉模式,读者可以结合代码理解:

饿汉模式如下:

/*
* 饿汉模式的实现Singleton1
*/
public class Singleton1 {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton1(){

}
//2.创建类的唯一实例
private static Singleton1 instance=new Singleton1();
//3.提供一个用于获取实例的方法
public static Singleton1 getInstance(){
return instance;
}

}


懒汉模式如下:

/*
* 懒汉模式的实现Singleton2
*/
public class Singleton2 {
//1.将构造方法私有化,不允许外部直接创建对象
private Singleton2(){

}
//2.创建类的唯一实例
private static Singleton2 instance;
//3.提供一个用于获取实例的方法
public static Singleton2 getInstance(){
if(instance==null)
instance=new Singleton2();
return instance;
}
}


测试代码如下:

public class Test {

public static void main(String[] args) {
// TODO 自动生成的方法存根
Singleton1 s1=Singleton1.getInstance();
Singleton1 s2=Singleton1.getInstance();
if(s1==s2){
System.out.println("s1和s2是同一个实例");
}
else System.out.println("s1和s2不是同一个实例");

Singleton2 s3=Singleton2.getInstance();
Singleton2 s4=Singleton2.getInstance();
if(s3==s4){
System.out.println("s3和s4是同一个实例");
}
else System.out.println("s3和s4不是同一个实例");
}

}


输出结果为:

s1和s2是同一个实例
s3和s4是同一个实例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: