1.单例模式是指只生成一个类的实例。
2.实现思路:
单例模式要求类能够有返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称)。
为什么是静态方法,因为该类无法通过构造方法创建实例。只能通过类名调用方法来获得该类的实例。
1.将构造方法私有,这样就无法通过构造方法创建该类的实例。
2.该类提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用。
实现代码:
1.饿汉式
当该类加载的时候,就创建该类的实例。优点是:线程安全的。缺点是:如果不使用该实例,造成内存的浪费。
public class Singleton{ private final static Singleton INSTANCE = new Singleton(); privete Singleton(){} public static Singleton getInstance(){ return INSTANCE; } }
2.懒汉式
当调用getInstance方法时创建该类的实例,是线程不安全的。如果在多线程下,一个线程进入了if (singleton == null)判断语句块,还未来得及往下执行,另一个线程也通过了这个判断语句,这时便会产生多个实例。所以在多线程环境下不可使用这种方式。
public class Singleton{ private static Singleton singleton ; privete Singleton(){} public static Singleton getInstance(){ if (singleton == null){ Singleton singleton = new Singleton(); } return singleton; } }
当然单例模式还有其他的写法,比如:线程安全的饿汉式。这里只是举了两个最简单的例子。