Если у вас есть:
class Foo implements DoSomething {...}
class Bar implements DoSomething {...}
obj = new Foo();
obj.doSomething();
Везде в вашем коде, когда вы захотите изменить все экземпляры Foo , чтобы использовать экземпляры Bar , вы действительно собираетесь искать / заменять?
Если у вас есть:
obj = DoSomethingFactory.create();
obj.doSomething();
Внутри DoSomethingFactory вы можете вернуть любой объект, который вам нужен, который реализует интерфейс DoSomething .
Используя Фабрику, вы можете контролировать все объекты, которые она создает.
Если вы решите изменить способ, которым Фабрика создает объекты, изменения вступают в силу немедленно в коде, который использует Фабрику.