1、立即加载/饿汉模式
/**
* 立即加载/饿汉模式
*/
public class StarvingModelSingleton {
private static StarvingModelSingleton instance = new StarvingModelSingleton();
private StarvingModelSingleton() {
}
public static StarvingModelSingleton getInstance() {
return instance;
}
public void doSomeThing() {
System.out.println(">>> StarvingModelSingleton do some things");
}
}
2、延迟加载/懒汉模式
/**
* 延迟加载/懒汉模式
*/
public class SlackerModelSingleton {
private static SlackerModelSingleton instance;
private SlackerModelSingleton() {
}
public static SlackerModelSingleton getInstance() {
if (instance == null) {
synchronized (SlackerModelSingleton.class) {
if (instance == null) {
instance = new SlackerModelSingleton();
}
}
}
return instance;
}
public void doSomeThing() {
System.out.println(">>> SlackerModelSingleton do some things");
}
}
3、用Enum实现单例示例
import java.sql.Connection;
import java.sql.DriverManager;
/**
* 用Enum实现示例
*/
public class EnumModelSingleton {
public static Connection getInstance() {
return EnumSingleton.SingletonFactory.getConnection();
}
public enum EnumSingleton {
SingletonFactory;
private Connection connection;
//枚举
private EnumSingleton() {
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC", "root", "123456");
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConnection() {
return connection;
}
}
}
使用示例(JacksonUtils使用示例)
@Slf4j
public class JacksonUtils {
private static ObjectMapper mapper;
private JacksonUtils() {
mapper = ObjectMapperSingleton.ObjectMapperFactory.getMapper();
}
private enum ObjectMapperSingleton {
ObjectMapperFactory;
private ObjectMapper mapper;
private ObjectMapperSingleton() {
mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}
public ObjectMapper getMapper() {
return mapper;
}
}
public static Optional<String> obj2Str(Object obj) {
try {
if (obj != null) {
if (obj.getClass() == String.class) {
return Optional.of(obj.toString());
}
return Optional.ofNullable(mapper.writeValueAsString(obj));
}
} catch (Exception e) {
log.error("Conversion object exception", e);
}
return Optional.empty();
}
......
}