Я видел реализацию Factory с использованием статических методов. Примерно так:
public class MyFactory {
public static Product1 createProduct1() {}
public static Product2 createProduct2() {}
}
p1 = MyFactory.createProduct1();
p2 = MyFactory.createProduct2();
Я не уверен, могу ли я назвать это Абстрактной Фабрикой, но это не вопрос. Что я понимаю об абстрактной фабрике, так это то, что она дает нам возможность легко менять семейства продуктов.
Factory factory = new MyFactory(); // might be a global or Singleton
p1 = factory.createProduct1();
p2 = factory.createProduct2();
И если я хочу изменить с MyFactory
на YourFactory
, то для изменения требуется только одна строка. Я также могу изменить это во время выполнения. Но возможно ли их реализовать как статический метод? Мне нужно изменить все вызовы на статическую фабрику. А также необходимо использовать проверку if-else во всех местах, если мы хотим принять решение во время выполнения.
p1 = YourFactory.createProduct1();
p2 = YourFactory.createProduct2();
Так в чем же преимущество реализации фабрики с использованием статических методов? Не теряем ли мы основной гибкости? Что я здесь пропустил?
Пожалуйста, обратите внимание, что никакой конкретный язык не предполагается. Любая помощь приветствуется.