Самая интеллектуальная IDE Идея сегодня стала ещё умней. А всё потому что я вот написал для неё плагинчик-инспекцию который проверяет корректность применения шаблона проектирования Одиночка (англ. Singleton). Так сказать, внёс лепту в борьбу с говнокодом. Исходники кстати доступны из репозитория на GitHub.
Итак, ним проверяется что:
- Класс-одиночка имеет приватный конструктор чтобы не допустить создания извне его экземпляра и наследования
- Класс-одиночка желательно должен быть финальным - это позитивно влияет на производительность, и опять таки перестраховка от его наследования.
- Метод
getInstance()должен быть публичным, статическим и возвращать экземпляр своего класса. А как ведь иначе?
Проверка является ли класс одиночкой делается в лоб — по наличию метода getInstance(). Не очень красиво, хотя будет ещё некрасивее если у вас он будет называться по другому.
Для решения этой проблемы можно использовать аннотации. В Groovy, например, уже давно есть стандартная аннотация @Singleton, которой можно пометить класс-одиночку. И в Идее даже есть инспекция которая проверяет одиночки определяя их по этой аннотации.
Для Явы уже есть целая библиотека аннотаций шаблонов проектирования JPatterns. У меня в планах наделать проверок для остальных шаблонов проектирования анализируя аннотации этой либы. Так что to be continued.
Кстати синглтоны не так уж и просты, как кажутся. Особенно те что с ленивой инициализацией. В частности стандартный синглтон создаваемый идеей не рассчитан на многопоточность.
P.S. А ещё getInstance() может принимать параметры, эта ситуация нормальна и просто игнорируются этой инспекцией.
Комментариев нет:
Отправить комментарий