版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37770023/article/details/81840231
设计模式_单例模式_学习记录
方式1:
package p4;
/**
* 饿汉式单例模式
* @author Guozhu Zhu
* @date 2018/7/25
* @version 1.0
*
*/
public class Singleton01 {
private static Singleton01 singleton01 = new Singleton01();
private Singleton01() {
}
public static Singleton01 getInstance() {
return singleton01;
}
}
方式2:
package p4;
/**
* 饱汉式单例模式(非线程安全)
* @author Guozhu Zhu
* @date 2018/7/25
* @version 1.0
*
*/
public class Singleton02 {
public static Singleton02 singleton02;
private Singleton02() {
}
public static Singleton02 getInstance() {
if (singleton02 == null) {
singleton02 = new Singleton02();
}
return singleton02;
}
}
方式3:
package p4;
/**
* 饱汉式单例模式 (线程安全)
* @author Guozhu Zhu
* @date 2018/7/25
* @version 1.0
*
*/
public class Singleton03 {
public static Singleton03 singleton03;
public Singleton03() {
}
public synchronized static Singleton03 getInstance() {
if (singleton03 == null) {
singleton03 = new Singleton03();
}
return singleton03;
}
}
方式4:
package p4;
/**
* 饱汉式单例模式(双重锁线程安全)
* @author Guozhu Zhu
* @date 2018/8/19
* @version 1.0
*
*/
public class Singleton04 {
public static Singleton04 singleton04;
private Singleton04() {
}
public static Singleton04 getInstance() {
if (singleton04 == null) {
synchronized(Singleton04.class) {
if (singleton04 == null) {
singleton04 = new Singleton04();
}
}
}
return singleton04;
}
}
方式5:
package p4;
/**
* 静态内部类实现单例模式(线程安全的)
* @author Guozhu Zhu
* @date 2018/8/6
* @version 1.0
*
*/
public class Singleton05 {
public static Singleton05 singleton05= null;
private Singleton05() {
}
public static Singleton05 getInstance() {
return InnerSingleton.singleton05;
}
private static class InnerSingleton{
public static final Singleton05 singleton05 = new Singleton05(); //不可变性
}
}