Я не знаю, есть ли здесь жесткое правило, но, на мой взгляд, ваш второй пример не является фабричным. Я думаю, что фабричный шаблон должен учитывать динамическое поведение в реализации. Другими словами, метод должен требовать ввода (даже если фабричный метод не принимает формальных параметров, он должен получить некоторый ввод, чтобы повлиять на реализацию, будь то через поля включающего класса или некоторые статические данные, полученные в другом месте), и это должно предусматривать возможность возврата различных типов на основе этого ввода. Я думаю, что ваш второй пример - это просто серия методов, которые создают конкретный класс и возвращают его.
Итак, теперь я спрашиваю, почему вы в первую очередь изучаете фабричный шаблон? Если во время компиляции вы всегда хотите создать экземпляр одного и того же класса (то есть MapperFactory.option1()
), почему бы вам просто не использовать оператор new в первую очередь? Во втором примере ваши «фабричные» методы не дают абсолютно никаких преимуществ перед оператором stock new .