设计模式-Design Pattern
一套反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结目的:可重用代码、代码易懂、可靠性高GitHub地址:
单例模式
有些对象我们只需要一个 配置文件、工具类、线程池、缓存、日志对象等本文介绍单例模式的两种模式:饿汉模式和懒汉模式
饿汉模式 私有静态直接实例化,加载时创建,获取较快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 }
如有理解不当或建议,欢迎指正