单例设计模式
- 解决问题:可以保证一个类在对象中唯一性
- 必须对于多个实例使用同一个配置信息对象时,就需要保证该对象唯一性
- 如何保证对象唯一性? - 不允许其他程序使用new创建对象
- 在该类创建一个本地实例
- 对外提供一个方法让其他程序可以获取该对象
 
- 步骤: - 私有化该类构造函数
- 通过new在本类中创建一个本类对象
- 定义一个公有的方法,将创建的对象返回
 
饿汉式
- 代码展示 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16- //饿汉式 
 public class Single {
 //类加载进来时,对象就已经生成了
 private static Single s = new Single();
 private Single(){}
 public static Single getInstance(){
 return s;
 }
 }
 public class Demo{
 `public static void main(String[] args){
 Single s1 = Single.getInstance();
 Single s2 = Single.getInstance();
 System.out.println(s1 == s2);
 }
 }
- 工作中常常使用的一种单例模式,安全性好 - 懒汉式
- 代码展示 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12- // 懒汉式 
 public class Single2 {
 //类加载时没有对象生成,只有调用了getInstance方法后才会创建对象
 //延迟加载程序
 private static Single2 s = null;
 private Single2(){}
 public static Single2 getInstance(){
 if(s==null)
 s = new Single2();
 return s;
 }
 }
- 常见于面试中,涉及知识点较多 - 内存图示(饿汉式为例) 
- main进栈,s1对象生成,方法区,single构造函数进入,静态区,single s getInstance进入,堆中开辟一块空间,赋予0x0045地址,静态区中s指向堆中地址。get方法进栈,s1地址指向0x0045,get出栈。