下面这个写法还是比较通用的
// 注意点1:这里设置无参构造函数为私有化@NoArgsConstructor(access = AccessLevel.PRIVATE)public final class SQLParserEngineFactory {// 注意点2,这里是concurrentHashMap是为了线程安全考虑private static final Map<String, SQLParserEngine> ENGINES = new ConcurrentHashMap<>();/*** Get SQL parser engine.** @param databaseTypeName name of database type* @return SQL parser engine*/// 注意点3:这里的入参为final类型public static SQLParserEngine getSQLParserEngine(final String databaseTypeName) {if (ENGINES.containsKey(databaseTypeName)) {return ENGINES.get(databaseTypeName);}synchronized (ENGINES) {// 注意点4:这里需要再次判断一次if (ENGINES.containsKey(databaseTypeName)) {return ENGINES.get(databaseTypeName);}SQLParserEngine result = new SQLParserEngine(databaseTypeName);ENGINES.put(databaseTypeName, result);return result;}}}
