Я пытаюсь понять фабричный шаблон. Если есть много реализаций, то мой фабричный шаблон будет иметь много вариантов if else или переключателей. А также каждый раз, когда я ввожу новую реализацию, я должен менять свой заводской код.
Как и в приведенных ниже примерах, если давайте предположим, что утка-собака реализует интерфейс домашних животных, как завтра, если многие животные реализуют интерфейс домашних животных, моя фабрика долго переполняется большим количеством кода if else else if или case case. Есть ли способ решить эту проблему с помощью более динамичного подхода?
package com.javapapers.sample.designpattern.factorymethod;
//Factory method pattern implementation that instantiates objects based on logic
public class PetFactory {
public Pet getPet(String petType) {
Pet pet = null;
// based on logic factory instantiates an object
if ("bark".equals(petType))
pet = new Dog();
else if ("quack".equals(petType))
pet = new Duck();
return pet;
}
Если животные растут
if ("bark".equals(petType))
pet = new Dog();
else if ("quack".equals(petType))
pet = new Duck();
else if ("mno".equals(petType))
pet = new MNO();
else if ("jkl".equals(petType))
pet = new JKL();
else if ("ghi".equals(petType))
pet = new GHI();
else if ("def".equals(petType))
pet = new DEF();
......
else if ("abc".equals(petType))
pet = new ABC();
return pet
Class.forName("")
что-то, это демонстрация этого. Это не запретительно, это просто нужно отметить; что-то где-то придется подгружать классы. 14.08.2013Map
. Вот так? Таким образом, вы все равно должны изменить свой заводской код. 01.05.2018