Я пытаюсь изучить творческие шаблоны проектирования, и я думаю, что теперь понимаю шаблон Factory Method. Но при переходе на абстрактный заводской шаблон я не смог найти ему применение. Я знаю, что я что-то пропустил с этим, но не знаю, где.
В шаблоне абстрактной фабрики у нас будет абстрактная фабрика, а конкретные фабрики вернут экземпляр. Предположим, мы имеем дело с созданием автомобилей. У нас будет абстрактная фабрика вроде
public interface CarFactory{
public Car getCar();
}
И наши бетонные заводы будут чем-то вроде
public class AudiFactory{
public Car getCar(){
return new Audi();
}
}
public class VolvoFactory{
public Car getCar(){
return new Volvo();
}
}
И в пользовательском классе мы будем использовать его как
CarFactory factory = new AudiFactory();
Car carAudi = factory.getCar();
factory = new VolvoFactory();
Car carVolvo = factory.getCar();
Я думаю, что мы можем создать ту же функциональность и с помощью Factory Pattern.
public class CarFactory{
public Car getCar(String make){
if("Audi".equals(make))
return new Audi();
else if("Volvo".equals(make))
return new Volvo();
}
}
И в пользовательском классе мы можем
CarFactory factory = new CarFactory();
Car carAudi = factory.getCar("Audi");
Car carVolvo = factory.getCar("Volvo");
Если я правильно понимаю (пожалуйста, поправьте меня, если это неправильно), зачем нам для этого нужен еще один шаблон проектирования?
CarFactory
to и использовать его для создания автомобиля, клиентскому классу все равно, какой это автомобиль, и он не должен этого знать. Если вы читали книгу GoF, возможно, прочитайте ее еще раз; клиентский класс никогда не должен создавать фабрику сам по себе. - person Łukasz   schedule 01.10.2015