一、定义
保证一个类仅有一个实例,并提供一个全局访问点.
二、优点
(1)在内存里只有一个实例,减少了内存开销
(2)可以避免对资源的多重占用
(3)设置全局访问点,严格控制访问 (对外不会new出来,只能通过这个方法创建对象)
三、缺点
没有接口,扩展困难.
四、举例实现,实际中常用
封装成转换json的类,传入一个对象,转换为json形式,就可以封装成一个util
最好的实现方式是枚举的实现方式。
一、枚举的实现方式:
1 @Slf4j 2 public enum EnumJacksonUtil { 3 4 /** 5 * 方法集合 6 */ 7 INSTANCE { 8 9 /** 10 * 转成json 11 * @param object 传入的实体类 12 * @return 13 */ 14 @Override 15 public String toJsonString(Object object) { 16 String json = null; 17 if (!StringUtils.isEmpty(object)) { 18 try { 19 log.info("传入对象:" + object); 20 json = mapper.writeValueAsString(object); 21 log.info("转换结果:" + json); 22 } catch (JsonProcessingException e) { 23 log.info("json转换异常{}" + object); 24 e.getMessage(); 25 } 26 } 27 return json; 28 } 29 30 /** 31 * 32 * @param jsonStr 传入的字符串 33 * @param cls 传入的实体类 34 * @return 35 */ 36 @Override 37 public <T> T stringToBean(String jsonStr, Class<T> cls) { 38 T t = null; 39 if (!StringUtils.isEmpty(mapper)) { 40 try { 41 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); 42 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 43 t = mapper.readValue(jsonStr, cls); 44 } catch (IOException e) { 45 log.info("json转换异常{}" + jsonStr); 46 e.getMessage(); 47 } 48 } 49 return t; 50 } 51 52 /** 53 * 将json数据转换成pojo对象list 54 * @param jsonData 55 * @param beanType 56 * @param <T> 57 * @return 58 */ 59 @Override 60 public <T> List<T> jsonToList(String jsonData, Class<T> beanType) { 61 JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, beanType); 62 try { 63 List<T> list = mapper.readValue(jsonData, javaType); 64 return list; 65 } catch (Exception e) { 66 e.printStackTrace(); 67 } 68 69 return null; 70 } 71 }; 72 73 /** 74 * springboot转换json的类 75 */ 76 private static ObjectMapper mapper; 77 78 static { 79 mapper = new ObjectMapper(); 80 } 81 82 /** 83 * 转成json 84 * 85 * @param object 传入的实体类 86 * @return 87 */ 88 public abstract String toJsonString(Object object); 89 90 /** 91 * 转成bean 92 * 93 * @param jsonStr 传入的字符串 94 * @param cls 传入的实体类 95 * @return 96 */ 97 public abstract <T> T stringToBean(String jsonStr, Class<T> cls); 98 99 /** 100 * 将json数据转换成pojo对象list 101 * 102 * @param jsonData 103 * @param beanType 104 * @param <T> 105 * @return 106 */ 107 public abstract <T> List<T> jsonToList(String jsonData, Class<T> beanType); 108 109 110 public static EnumJacksonUtil getInstance() { 111 return INSTANCE; 112 } 113 114 }