您的位置:首页 > 编程语言 > Java开发

Java单例设计模式

2015-08-11 17:18 357 查看
注:设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。

23种设计模式。

一、单例设计模式:
解决的问题:使得一个类只能创建一个对象。

方法一(饿汉式):

public class TestSingleton {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);//true
}
}

class Singleton {
//1.私有化构造器,使得在类的外部不能调用此构造器
private Singleton() {

}

//2.在类的内部创建一个类的实例,当加载Singleton类时就创建好了实例对象
private static Singleton instance = new Singleton();

//3.通过公共的方法来调用私有的对象
//4.此公共的方法只能通过类来调用,因此设置为static,同时类的实例也必须为static声明,所以2.需要static关键字
public static Singleton getInstance() {
return instance;
}
}
方法二(懒汉式:可能存在线程安全问题):

public class TestSingleton {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);//true
}
}

class Singleton {
//1.私有化构造器,使得在类的外部不能调用此构造器
private Singleton() {

}

//2.在类的内部创建一个类的实例,当加载Singleton类时就创建好了实例对象
private static Singleton instance = null;

//3.通过公共的方法来调用私有的对象
//4.此公共的方法只能通过类来调用,因此设置为static,同时类的实例也必须为static声明,所以2.需要static关键字
public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}


懒汉式线程安全解决方式:

/*
* 对于懒汉式的线程安全问题:使用同步机制
* 对于一般的方法内,使用同步代码块,可以考虑使用this。
* 对于静态方法而言,使用当前类本身充当锁。
*/
public class TestSingleton {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);//true
}
}

class Singleton {
//1.私有化构造器,使得在类的外部不能调用此构造器
private Singleton() {

}

//2.在类的内部创建一个类的实例,当加载Singleton类时就创建好了实例对象
private static Singleton instance = null;

//3.通过公共的方法来调用私有的对象
//4.此公共的方法只能通过类来调用,因此设置为static,同时类的实例也必须为static声明,所以2.需要static关键字
public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: