В школе я посещаю уроки по шаблонам проектирования и прочитал несколько глав книги Head First Design Patterns. Я хотел бы выяснить, в какой степени шаблоны проектирования могут предотвратить переписывание существующего кода.
Возьмем, к примеру, Duck
классы и FlyBehavior
классы. У меня есть в public static void main(String[] args)
следующий код:
Duck mallard = new MallardDuck(new FlyWithWings());
Правильно ли я говорю, что вам неизбежно придется изменить свой main()
метод, когда вы захотите добавить новую стратегию? Таким образом, вы изменяете существующий код, верно? Я конкретно имею в виду ту часть, где упоминается конкретный класс стратегии: new FlyWithWings().
Если вы внедрили шаблон фабричного метода в свой код, вы могли бы вообще запретить упоминание конкретного класса (FlyWithWings
):
public FlyBehavior returnBehavior(FlyBehaviorFactory factory, String behaviorType) {
return factory.getFlyBehavior(behaviorType);
}
И, таким образом, иметь следующую строку кода:
Duck mallard = new MallardDuck(returnBehavior(flyFactory, "wings"));
Таким образом, определенная часть вашей программы не должна знать, какую FlyBehaviorFactory использовать. Тем не менее, вашему методу main()
все равно придется указывать определенные параметры в методе returnBehavior, чтобы знать, какая фабрика какую стратегию создаст. Таким образом, прав ли я, говоря, что вам все равно придется модифицировать main()
, если я добавлю новый класс FlyBehavior и захочу добавить его в качестве параметра в returnBehavior()
?
Можно ли еще улучшить эту ситуацию?