标签:包含 private let 多线程 完成 class 对象 直接 有一个
第一次写,有不足之处可以点出来,互相交流~~
什么是单例模式?
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
单例模式分类:懒汉式单例、饿汉式单例
单例模式的特点:
1、单例类之呢个有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
①饿汉式单例
//饿汉式单例类,在类初始化时,已经自行实例化
public class Singleton {
private Singleton() {
}
private static final Singleton single = new Singleton();
// 静态工厂方法
public static Singleton getInstance() {
return single;
}
}
public class test {
public static void main(String[] args) {
Singleton sl1 = Singleton.getInstance();
Singleton sl2 = Singleton.getInstance();
System.out.println((sl1 == sl1) + "-");
}
}
②懒汉式单例
//懒汉式单例类.在第一次调用的时候实例化自己
public class Singleton1 {
private Singleton1() {
}
private static Singleton1 single=null;
// 静态工厂方法
public static Singleton1 getInstance() {
if(single == null) {
single = new Singleton1();
}
return single;
}
}
public class test {
public static void main(String[] args) {
Singleton sl1 = Singleton.getInstance();
Singleton sl2 = Singleton.getInstance();
System.out.println((sl1 == sl1) + "-");
}
}
饿汉式与懒汉式的区别:
饿汉式就是类一旦加载,就把单列初始化完成,保证getInstance的时候,单例就已经存在了。
懒汉式就是当调用genInstance的时候,才会去初始化这个单例.
其实还可以用以下两中方式区分:
1、线程安全方面:
饿汉式天生就是线程安全的,可以直接 用于多线程而不出现问题,而懒汉式本身就是非线程安全的。
2、资源加载和性能
饿汉式在类创建的同时就实例化一个静态对象出来,不管你调不调用,都会占据内存了,但是第一调用时,也会比懒汉式快,因为资源被初始化了
懒汉式,其实也恰恰和饿汉式相反,会在第一次调用实例对象出来,要初始化,性能行会延迟。
标签:包含 private let 多线程 完成 class 对象 直接 有一个
原文地址:https://www.cnblogs.com/Libbo/p/9966590.html