单例设计模式:
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
主要解决:一个全局使用的类频繁地创建与销毁。
何时使用:当您想控制实例数目,节省系统资源的时候。
如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
关键代码:构造函数是私有的。
单例模式的从实现步骤上来讲,分为三步:
构造方法私有,保证无法从外部通过 new 的方式创建对象。对外提供获取该类实例的静态方法类的内部创建该类的对象,通过第 2 步的静态方法返回
单例模式包括饿汉和懒汉,懒汉不安全。
懒汉方式。指全局的单例实例在第一次被使用时构建。
饿汉方式。指全局的单例实例在类装载时构建。
饿汉单例设计模式: 1. 私有化构造函数。 2. 声明本类的引用类型变量并且指向本类的对象,(private static) 3. 提供一个公共静态的方法获取本类对象。 实现:
public class BasicSingleTon { //创建唯一实例 private static final BasicSingleTon instance = new BasicSingleTon(); //第二部暴露静态方法返回唯一实例 public static BasicSingleTon getInstance() { return instance; } //第一步构造方法私有 private BasicSingleTon() { } }懒汉单例设计模式: 1. 私有化构造函数。 2. 声明本类的引用类型变量,但是不要创建对象。 3. 提供一个公共静态的方法获取本类对象,获取之前先判断是否已经创建了本类的对象, 如果没有创建,创建再返回。如果已经创建了,那么直接访问即可。
实现:
public class LazyBasicSingleTon { private static LazyBasicSingleTon singleTon = null; public static LazyBasicSingleTon getInstance() { //延迟初始化 在第一次调用 getInstance 的时候创建对象 if (singleTon == null) { singleTon = new LazyBasicSingleTon(); } return singleTon; } private LazyBasicSingleTon() { } }