Лучший подход (который вносит как можно меньше изменений в ваш код) заключается в следующем:
public class ConnectionFactory{
private static ConnectionFactory instance = new ConnectionFactory();
public static ConnectionFactory getInstance(){
return instance;
}
private ConnectionFactory(){
}
}
Как видите, в методе getInstance
нет реальной необходимости, поэтому вы можете упростить код до:
public class ConnectionFactory{
public static final ConnectionFactory INSTANCE = new ConnectionFactory();
private ConnectionFactory(){
}
}
UPD о синхронизации: лучший способ - синхронизация с блокировкой, которая не видна внешним классам, т. Е .:
public class ConnectionFactory{
private static final Object lock = new Object();
public static void doSmth() {
synchronized (lock) {
...
}
}
public static void doSmthElse() {
synchronized (lock) {
...
}
}
}
Существует много дискуссий о том, «почему синхронизация в this
- плохая идея» (например, эта ), я думаю, что то же самое актуально для синхронизации в классе.