- Популярные категории
Структура данных
Сетевые операции
СУБД
Операционная система
Java
MS Excel
iOS
HTML
CSS
Android
Python
Программирование на C
C++
C#
MongoDB
MySQL
Javascript
PHPФизика
Химия
Биология
Математика
Английский язык
Экономика
Психология
Социальные дисциплины
Модные исследования
Юридические науки
- Выбранные материалы
- Заметки для экзамена UPSC IAS
- Передовые методы для разработчиков
- Вопросы и ответы
- Эффективное резюме
- Вопросы для собеседования по HR
- Компьютерный глоссарий
- Кто есть кто
如何防止 клонирование для изменения шаблона класса Singleton на Java?
Шаблон Singleton утверждает, что у класса может быть один экземпляр, не разрешается создавать несколько экземпляров. Для этого мы делаем конструктор класса закрытым и возвращаем экземпляр с помощью статического метода. Однако используя клонирование, мы все еще можем создать несколько экземпляров класса. См. пример ниже:
Пример: создание шаблона Singleton
public class Tester{
public static void main(String[] args)
throws CloneNotSupportedException {
A a = A.getInstance();
A b = (A)a.clone();
System.out.println(a.hashCode());
System.out.println(b.hashCode());
}
}
class A implements Cloneable {
private static A a;
private A(){}
public static A getInstance(){
if(a == null){
a = new A();
}
return a;
}
@Override
protected Object clone()
throws CloneNotSupportedException {
return super.clone();
}
}
Вывод
705927765 366712642
Здесь вы можете заметить, что мы создали другой объект класса Singleton. Давайте посмотрим, как избежать такой ситуации:
Верните тот же объект также в методе клонирования.
Пример: защита шаблона Singleton
@Override
protected Object clone()
throws CloneNotSupportedException {
return getInstance();
}
Вывод
705927765 705927765
广告