单例模式
一、什么是单例模式
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意:
-
1、单例类只能有一个实例。
-
2、单例类必须自己创建自己的唯一实例。
-
3、单例类必须给所有其他对象提供这一实例。
二、什么情况下用单例模式
一个全局使用的类频繁地创建与销毁。当您想控制实例数目,节省系统资源的时候。
如何实现
一、饿汉式单例
public class HungrySingleton {
private HungrySingleton(){
}
private final static HungrySingleton HUNGRY_SINGLETON = new HungrySingleton();
public static HungrySingleton getInstance(){
return HUNGRY_SINGLETON;
}
}
-
缺点:不使用也会创建,浪费空间。
二、懒汉式单例
public class LazeSingleton {
private LazeSingleton(){
}
private volatile static LazeSingleton laze;
public static LazeSingleton getInstance(){
if(laze == null){
synchronized (LazeSingleton.class){
if(laze == null){
laze = new LazeSingleton();
}
}
}
return laze;
}
}
-
缺点:可以被反射破坏。
三、静态内部类
public class StaticInnerSingleton {
private StaticInnerSingleton(){
}
public static StaticInnerSingleton getInstance(){
return InnerSingleton.STATIC_INNER_SINGLETON;
}
public static class InnerSingleton{
private final static StaticInnerSingleton STATIC_INNER_SINGLETON = new StaticInnerSingleton();
}
}
四、Enum类
Enum类不可以被反射破坏
public enum EnumSingleton {
Instance;
public EnumSingleton getInstance(){
return Instance;
}
}
posted on 2021-12-28 12:56 lilele200706 阅读(14) 评论(0) 编辑 收藏 举报