Java设计模式之单例模式
学习java有一段时间了,想更高的使用java,就准备学习些设计模式。设计模式是一种经验,或者说是一种模型,与无头脑的编写代码与使用设计模式相比,设计模式更有效率和规范。
今天介绍单例模式,单例模式就是说,应用的全局某个类只有一个实例,好比你只有一个丈夫或者老婆即可,多了会出乱子。主要用于工具类,线程池等场景。。。
单例模式分为饿汉模式和懒汉模式。
饿汉模式:
1 public class Ehan { 2 3 //饿汉模式的步骤 4 5 // 1.对该类的构造方法私有化,不允许外部创建对象。 6 private Ehan() { 7 } 8 // 2.在本类中创建自己的实例化对象 9 10 private static Ehan ehan = new Ehan(); 11 12 // 3.提供一个外部调用实例的方法 13 14 public static Ehan getEhan() { 15 return ehan; 16 17 } 18 19 20 }
测试:
1 public static void main(String[] args) { 2 // 测试饿汉模式 3 4 Ehan ehan1 = Ehan.getEhan(); 5 Ehan ehan2 = Ehan.getEhan(); 6 if (ehan1 == ehan2) { 7 System.out.println("ehan是同一个实例"); 8 } 9 10 11 12 }
结果:打印出ehan是同一个实例
懒汉模式:
1 public class LanHan { 2 3 4 //1. 私有化构造方法 5 private LanHan() { 6 } 7 8 //2. 声明本类的实例 9 private static LanHan lanHan; 10 11 //3. 提供外部调用的方法 12 public static LanHan getLanHan() { 13 14 if (lanHan == null) { 15 lanHan = new LanHan(); 16 } 17 return lanHan; 18 19 } 20 21 }
测试:
1 public static void main(String[] args) { 2 3 // 测试懒汉模式 4 5 LanHan lanHan1 = LanHan.getLanHan(); 6 LanHan lanHan2 = LanHan.getLanHan(); 7 8 if (lanHan1 == lanHan2) { 9 System.out.println("lanHan是同一个实例"); 10 } 11 12 13 } 14 15 }
结果:lanHan是同一个实例
以上就是两种单例模式的代码实现,其中有些区别:
* 饿汉模式是先实例化对象,等着别人来调。所以加载类时速度慢,运行期间调用时速度快。
* 懒汉模式是别人调用时,再创建对象,所以加载类时快,调用时慢。
厚积薄发,不忘初衷