Является ли это недостатком реализации Groovy шаблона Singleton?
Прямая реализация шаблона Singleton без использования метакласса:
class A{
static final instance = new A()
private A(){}
static getInstance(){return instance}
}
Почему частный конструктор не уважает Groovy? Хотя с помощью интуиции можно сказать, что это шаблон синглтона, в отличие от java, такая реализация не ограничивает программиста от создания нового экземпляра этого класса с использованием new A()
выходит за рамки этого класса. Так не должно ли это рассматриваться как недостаток в его реализации?
2 ответа
Решение
Вы можете заменить код выше с:
@Singleton
class A{
}
и получить доступ к экземпляру синглтона через:
A singleton = A.instance
Это ошибка в текущей реализации Groovy, поэтому в Groovy нет ничего приватного. Посмотрите на его вопрос JIRA. Я также недавно написал небольшую статью об этом.