1.什么是单例模式
单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例。
实现步骤:
public class Singleton1 {
private Singleton1(){}
private static Singleton1 singleton1 = new Singleton1();
public static Singleton1 getInstance(){
return singleton1;
}
}
注:synchronized 关键字用法 https://www.cnblogs.com/fnlingnzb-learner/p/10335662.html
public class Singleton2 {
private Singleton2(){}
private static Singleton2 singleton2;
public static synchronized Singleton2 getInstance(){
if (singleton2 == null){
singleton2 = new Singleton2();
}
return singleton2;
}
}
注:静态内部类只有在被调用时才会被加载
public class Singleton3 {
private Singleton3(){}
public static class Single3ClassInstance{
private static final Singleton3 singleton3 = new Singleton3();
}
public static Singleton3 getInstance(){
return Single3ClassInstance.singleton3;
}
}
public class Singleton4 {
private Singleton4(){}
private static Singleton4 singleton4;
public static Singleton4 getInstance(){
if (singleton4 == null){
synchronized (Singleton4.class){
if (singleton4 == null ){
singleton4 = new Singleton4();
}
}
}
return singleton4;
}
}
这是实现单例模式的最佳方法。它更简洁,自动支持序列化机制,绝对防止多次实例化。这种方式是 Effective Java 作者 Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还自动支持序列化机制,防止反序列化重新创建新的对象,绝对防止多次实例化。
注:枚举类型使用 https://blog.csdn.net/newbie_907486852/article/details/81027512
public class Singleton5 {
private static enum getSingleton5{
INSTANCE;
private Singleton5 singleton5;
private getSingleton5(){
singleton5 = new Singleton5();
}
public Singleton5 getInstance(){
return singleton5;
}
}
public static Singleton5 getInstance(){
return getSingleton5.INSTANCE.getInstance();
}
}
参考:
https://www.runoob.com/design-pattern/singleton-pattern.html
https://blog.csdn.net/weixin_42152604/article/details/87915944
https://blog.csdn.net/weixin_42762133/article/details/82890555
https://www.cnblogs.com/fnlingnzb-learner/p/10335662.html
https://blog.csdn.net/newbie_907486852/article/details/81027512
附测试类
public class Main {
public static void main(String[] args) {
System.out.println("=====饿汉模式=====");
Singleton1 singleton1 = Singleton1.getInstance();
Singleton1 singleton11 = Singleton1.getInstance();
System.out.println(singleton1==singleton11);
System.out.println("=====懒汉模式=====");
Singleton2 singleton2 = Singleton2.getInstance();
Singleton2 singleton21 = Singleton2.getInstance();
System.out.println(singleton2 == singleton21);
System.out.println("=====静态内部类模式=====");
Singleton3 singleton3 = Singleton3.getInstance();
Singleton3 singleton31 = Singleton3.getInstance();
System.out.println(singleton3 == singleton31);
System.out.println("=====双重检查锁模式=====");
Singleton4 singleton4 = Singleton4.getInstance();
Singleton4 singleton41 = Singleton4.getInstance();
System.out.println(singleton4 == singleton41);
System.out.println("=====枚举类型模式=====");
Singleton5 singleton5 = Singleton5.getInstance();
Singleton5 singleton51 = Singleton5.getInstance();
System.out.println(singleton5 == singleton51);
}
}
本文地址:https://blog.csdn.net/qq_36110736/article/details/107582945
如对本文有疑问, 点击进行留言回复!!
迪摩F10空中骑士机械键盘怎么样 迪摩F10空中骑士机械键盘开箱
曜越TT Toughram RGB 3600内存条怎么样 曜越TT Toughram RGB 3600测评
网友评论