#шаблоны_проектирования
Имеется класс - простая фабрика, в котором реализован статический метод, который генерирует инстанс одного объекта на основе принятого в параметрах другого объекта. Данный метод может вызываться с разных потоков. Нужно ли делать данную фабрику синглтоном? Если да, то зачем?
Ответы
Ответ 1
Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопроцессном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру. Источник. Чисто из определения - нет, не нужно использовать синглтон. Паттер "синглтон" предполагает, что будет существовать единственный экземпляр данного класса. Но задайте себе вопрос: а нужен ли вам этот экземпляр? Имеется класс - простая фабрика, в котором реализован статический метод, который генерирует инстанс одного объекта на основе принятого в параметрах другого объекта. Предполагая, что этот статический метод является в классе единственным, то нет необходимости вообще иметь возможность порождать объекты данного класса. Вместо этого можно обойтись простой функцией-фабрикой. class Fabric { static generate(template) { // ... } } Fabric.generate(instance); // думаю, можно безболезненно превратить в это: function generate(template) { // тот же код, что и в Fabric.generate(); } generate(instance); Более того, статический метод по определению не может быть вызван на экземпляре класса, поэтому нет абсолютно никакой необходимости в наличии даже единственного экземпляра этого класса, ведь фабричный метод можно вызвать на самом классе (более того, только на нем, поскольку он является статическим). Поэтому на вашем месте я бы однозначно не стал реализовывать синглтон, а более того, рассмотрел бы возможность избавления от класса вообще.Ответ 2
Неплохо было бы, конечно, указать язык, на котором вы пишите. Но скажу в рамках PHP. Скажу прямо, редко видел фабрики со статичными методами, но да не в том вопрос. Смысла делать фабрику синглотом лично я по описанному применению не вижу по той простой причине, что статичный метод принадлежит классу, а не объекту. Т.е. он по своей природе существует в единственном экземпляре.
Комментариев нет:
Отправить комментарий