设计模式-单例模式
设计模式-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 }
如有理解不当或建议,欢迎指正
作者:不放糖的咖啡
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.