Вот вопрос:
Реализация одноэлементного шаблона проектирования в качестве шаблона таким образом, чтобы для любого заданного класса Foo вы могли вызвать Singleton :: instance () и получить указатель на экземпляр одноэлементного объекта.типа Foo.Предположим, что существует класс Lock, который имеет методы acqu () и release ().Как вы могли бы сделать вашу реализацию безопасной и исключительной?
Мой анализ:
, как отмечает Джошуа Блох в "эффективной java", лучшие способы реализации синглтон-класса - это enum и publicстатический фабричный метод.Объединение энергозависимых и синхронизированных - вот способ, которым я знаю, чтобы сделать его поточно-ориентированным и ленивым инициализировать следующим образом:
public class myS{
private static volatile final _ins = null;
private myS(){};
public static myS getIns(){
synchronized(){
if(_ins==null) _ins = new myS();
}
return _ins;
}
}
На данный момент, я немного растерялся, чтобы сделать шаблон синглтона.Насколько я понимаю, у нас либо есть интерфейс с универсальным типом или абстрактный класс.Пока клиенты их реализуют, они одноразовые.Итак, мое предположение решение состоит в следующем:
public interface singleton<T>{
public T instance();
}
public class Foo implements singleton<T>{
private static volatile final Foo _ins = null;
public static Foo instance(){
synchronized(this)
if(_ins==null){
_ins = new Foo();
}
}
}
}