Прежде всего необходимо сделать различие между простой фабрикой и абстрактной фабрикой. Первый - это простая фабрика, где у вас есть только один класс, который действует как фабрика для создания объекта, а во втором вы подключаетесь к интерфейсу фабрики (который определяет имена методов), а затем вызываете различные фабрики, которые реализуют этот интерфейс, который должны иметь различные реализации одного и того же метода на основе некоторых критериев. Например, у нас есть интерфейс ButtonCreationFactory, который реализуется двумя фабриками: первым WindowsButtonCreationFactory (создает кнопки с внешним видом Windows) и вторым LinuxButtonCreationFactory (создает кнопки с внешним видом Linux). Таким образом, обе эти фабрики имеют один и тот же метод создания с разными реализациями (алгоритмами). Вы можете ссылаться на это во время выполнения, основываясь на методе, который вы вводите нужной кнопкой.
Например, если вы хотите, чтобы кнопки с Linux выглядели и чувствовали:
ButtonCreationFactory myFactory = new LinuxButtonCreationFactory();
Button button1 = myFactory.createButton(...);
или если вы хотите кнопки Windows
ButtonCreationFactory myFactory = new WindowsButtonCreationFactory();
Button button1 = myFactory.createButton(...);
Именно в этом случае это приводит к некоему стратегическому шаблону, поскольку он дифференцирует алгоритмы для некоторого создания. Однако, он отличается от него семантически, потому что он используется для СОЗДАНИЯ ОБЪЕКТА, а не для операционных алгоритмов. Итак, в основном с помощью абстрактной фабрики вы создаете объект с использованием разных стратегий, что делает его очень похожим на шаблон стратегии. Тем не менее, AbstractFactory является творческим, в то время как шаблон Strategy работает. Реализация мудрая, они в результате будут одинаковыми.