单例模式(Singleton)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式(Singleton)相关的知识,希望对你有一定的参考价值。
1.解决的问题:使得一个类只能够创建一个对象。
2.如何实现:
①私有化构造器,使得在类的外部不能调用该构造器
②在类的内部创建一个实例
③私有化该对象,通过公共的方法来调用(返回该对象)
④由于需要在类外部调用该方法(外部不能实例化该类对象),所以把该方法设置为static以便在类外部通过类名直接调用该方法,同时这个实例也应设置成静态(静态方法不能调用非静态的对象返回)
饿汉式
public class TestSingleton {
public static void main(String[] args) {
Singleton s1 = Singleton.getSingleton();
Singleton s2 = Singleton.getSingleton();
System.out.println(s1 == s2);// true
}
}
class Singleton {
private static Singleton s = new Singleton();
private Singleton() {
}
public static Singleton getSingleton() {
return s;
}
}
懒汉式 (延迟创建)可能存在线程安全问题,参见互斥锁
public class TestSingleton1 {
public static void main(String[] args) {
Singleton1 s1 = Singleton1.getSingleton();
Singleton1 s2 = Singleton1.getSingleton();
System.out.println(s1 == s2);// true
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
class Singleton1 {
private static Singleton1 s = null;
private Singleton1() {
}
public static Singleton1 getSingleton() {
if (s == null) {
s = new Singleton1();
}
return s;
}
}
更深的讨论:
以上是关于单例模式(Singleton)的主要内容,如果未能解决你的问题,请参考以下文章