Singleton 单例模式
单例模式,也就是一个类只能实例化成一个对象。对于需要频繁创建,销毁的对象可以使用单例模式。单例模式 有两种实现方式 : 懒汉式 和 饿汉式
饿汉式
饿汉式在创建类的时候直接创建一个实例, 具体过程如下:
将类的构造方法设置为 private
创建一个静态的对象
创建一个返回静态对象的函数
用代码表示如下:
//饿汉式
public class Singleton1 {
//1.创建私有构造
private Singleton1() {
}
//2.创建该类型的私有静态实例
private static Singleton1 instance=new Singleton1();
//3.创建静态方法返回静态实例对象
public static Singleton1 getInstance() {
return instance;
}
}
懒汉式
创建类的时候实例化一个null对象。每一次尝试实例化的时候查询一下实例化是否为null,若不为null,创建一个静态对象,反之返回静态对象。 具体代码如下:
//懒汉式
public class Singleton2 {
//1.创建私有构造
private Singleton2() { }
//2.创建类的时候实例化一个null
private static Singleton2 instance=null;
//3.设置一个获取实例化的函数
public static Singleton2 getInstance() {
if(instance==null) {
instance= new Singleton2();
}
return instance;
}
}
最后我们编写了一个测试类 SingletonTest。
public class SingletonTest {
public static void main(String[] args) {
//私有化构造函数无法访问
//Singleton1 one=new Singleton1();
//只能通过共有的静态方法直接获取一个静态实例
Singleton1 one=Singleton1.getInstance();
Singleton1 two=Singleton1.getInstance();
System.out.println(one);
System.out.println(two);
System.out.println("\n=============================================\n");
Singleton2 one1=Singleton2.getInstance();
Singleton2 two1=Singleton2.getInstance();
System.out.println(one1);
System.out.println(two1);
}
}
输出结果如下:
indi.chester.singleton.Singleton1@1540e19d
indi.chester.singleton.Singleton1@1540e19d
=============================================
indi.chester.singleton.Singleton2@677327b6
indi.chester.singleton.Singleton2@677327b6
可以看出我们尝试创建两个对象,但最终返回的都是同一个对象。
Last updated