总结在前面:构造方法要私有化,通过静态方法获取单例对象,当然要保证线程同步安全问题
静态内部类创建式
//其实去掉注释不到十行代码,耐心观看
public class SingleStatic {//(优秀!每一个单词都是精华!没有一个是多余的)
//静态内部类实现模式--线程安全 调用效率高,也可以实现延迟加载
//static 涉及到的类加载机制, 静态属性,静态代码块,然后顺序加载类代码
//定义静态内部类
//private保证私有别人不能访问,那就不能修改
//static保证全局唯一
private static class LazyHolder{
private static final SingleStatic INSTANCE = new SingleStatic();
}
//将默认构造方法私有化
private SingleStatic(){}
//同样提供静态方法来获取实例
public static SingleStatic getInstance(){
return LazyHolder.INSTANCE;
}
}
懒汉式
//懒汉式的创建方式--调用效率低,方法需要同步synchronized
// 在程序需要的时候创建对象,不需要就不会创建对象也不会造成资源浪费--能够实现延迟加载
public class SingelLazy {
private static SingelLazy instance ;
private SingelLazy(){}
public static synchronized SingelLazy getInstance(){
if(null==instance){
instance = new SingelLazy();
}
return instance;
}
}
饿汉式
//饿汉式的创建方式--调用效率高
//程序启动类加载时就把对象创建出来了,需要的时候直接返回即可
//不能延时加载 这样的话如果程序从始至终都没使用这个对象的话,会造成一定的资源浪费
public class SingleHarvest {
private static SingleHarvest instance = new SingleHarvest();
private SingleHarvest(){}
public static SingleHarvest getInstance(){
return instance;
}
}
枚举式
public enum SingelEnum {
//枚举元素本身就是单例,所以任何情况都是单例的
INSTANCE;
//定义自己需要的操作即可
public void instanceOperation(){}
}
分享即学习,即开心❤️