单例对象:保证内存中只存在一个对象, 保证对象的唯一性。
1) 禁止其他程序通过构造函数创建该类对象。
2) 只允许其他程序通过该类中的定义方法来实例化对象。
实现:
1) 在类中创建该类的私有静态的对象。
2) 将构造函数私有化。
3) 提供一个静态方法来获取该对象。
饿汉式设计模式:
1 /** 2 * 饿汉式设计模式 3 * 4 * @author Wáng Chéng Dá 5 * @create 2017-02-21 8:30 6 */ 7 public class HungryMan { 8 9 //在饿汉式设计模式中, 初始化变量的时候最好加上 final 关键字, 这样比较严谨。 10 private final static HungryMan hungryMan = new HungryMan(); 11 12 private HungryMan() { 13 14 } 15 16 public static HungryMan getHungryMan() { 17 return hungryMan; 18 } 19 }
懒汉式设计模式:
1 /** 2 * 懒汉式设计模式 3 * 4 * @author Wáng Chéng Dá 5 * @create 2017-02-21 8:37 6 */ 7 public class LazyMan { 8 9 private static LazyMan lazyMan = null; 10 11 private LazyMan() { 12 13 } 14 15 /** 16 * 考虑并发情况 17 * 但是每次都需要判断锁, 影响程序加载的效率, 应尽量减少判断锁的次数, 18 * 提高程序的运行效率, 所以在锁外层又加了一层判断。 19 */ 20 public static LazyMan getBiLazyMan(){ 21 if (lazyMan == null) { 22 synchronized (LazyMan.class) { 23 if (lazyMan == null) { 24 lazyMan = new LazyMan(); 25 } 26 } 27 } 28 return lazyMan; 29 } 30 31 //不考虑并发情况 32 public static LazyMan getLazyMan(){ 33 if (lazyMan == null) { 34 lazyMan = new LazyMan(); 35 } 36 return lazyMan; 37 } 38 }
饿汉式设计模式和懒汉式设计模式的区别:
饿汉式设计模式:程序只要开始, 就将对象实例化, 用到的时候就省去了再实例的时间, 所以速度和反应快。
懒汉式设计模式:只有用到对象的时候才会将对象实例化,不会浪费,所以效率要高一些。