设计模式-单例模式

设计模式-Design Pattern
  一套反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
目的:可重用代码、代码易懂、可靠性高

GitHub地址:https://github.com/soft-tank/design-pattern

 

单例模式
  有些对象我们只需要一个
  配置文件、工具类、线程池、缓存、日志对象等

  本文介绍单例模式的两种模式:饿汉模式和懒汉模式
饿汉模式
  私有静态直接实例化,加载时创建,获取较快

 1 /**
 2  * 单例模式Singleton 
 3  * 场景:全局只有一个实例 
 4  * 作用:保证全局只有一个实例 
 5  * 类型:饿汉模式、懒汉模式
 6  * 
 7  * 饿汉模式
 8  * @author coffee
 9  */
10 public class Singleton {
11 
12     // 构造方法私有化,保证单例
13     private Singleton() {
14 
15     }
16 
17     // 自己创建一个实例,私有静态
18     private static Singleton instance = new Singleton();
19 
20     // 提供一个用于获取实例的方法,公有静态
21     public static Singleton getInstanse() {
22         return instance;
23     }
24 
25     public LocalDate getDate() throws Exception {
26         return LocalDate.now();
27     }
28 }

 

测试

 1     @Test
 2     public void test() {
 3         try {
 4             LocalDate date = Singleton.getInstanse().getDate();
 5             Assert.assertEquals(date, LocalDate.now());
 6         } catch (Exception e) {
 7             // TODO Auto-generated catch block
 8             e.printStackTrace();
 9         }
10     }

 

懒汉模式
  实例化交给getIntance()方法,获取时创建,较慢

 1 /**
 2  * 懒汉模式
 3  * @author coffee
 4  */
 5 public class Singleton2 {
 6     
 7     //构造方法私有化,保证单例
 8     private Singleton2(){
 9         
10     }
11     
12     //自己创建一个实例,私有静态
13     private static Singleton2 instance;
14     
15     //提供一个用于获取实例的方法,公有静态
16     public static Singleton2 getInstanse(){
17         synchronized (Singleton2.class) {
18             if(instance == null){
19                 instance = new Singleton2();
20             }
21         }
22         return instance;
23     }
24     
25     public LocalDate getDate() throws Exception {
26         return LocalDate.now();
27     }
28 }

测试

 1     @Test
 2     public void test() {
 3         try {
 4             LocalDate date = Singleton2.getInstanse().getDate();
 5             Assert.assertEquals(date, LocalDate.now());
 6         } catch (Exception e) {
 7             // TODO Auto-generated catch block
 8             e.printStackTrace();
 9         }
10     }

 

如有理解不当或建议,欢迎指正

posted @ 2018-04-03 21:30  不放糖的咖啡  阅读(119)  评论(0编辑  收藏  举报