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是同一个实例

 

以上就是两种单例模式的代码实现,其中有些区别:

* 饿汉模式是先实例化对象,等着别人来调。所以加载类时速度慢,运行期间调用时速度快。
* 懒汉模式是别人调用时,再创建对象,所以加载类时快,调用时慢。


厚积薄发,不忘初衷

 

posted @ 2018-02-28 15:53  石下萌芽  阅读(155)  评论(0编辑  收藏  举报