Я пытаюсь понять принципы SOLID и поэтому реализовал некоторые фрагменты java. Сейчас моя озабоченность - ОКР. Имея следующие образцы,Применение принципа open/closed в Java
public abstract class Bakery
{
public abstract Bakegood bake();
}
/******************************************/
public class BreadBakery extends Bakery {
@Override
public Bakegood bake() {
return new Bread();
}
}
/******************************************/
public class CakeBakery extends Bakery {
@Override
public Bakegood bake() {
return new Cake();
}
}
/******************************************/
Как создать правильную пекарню. Предположим, что клиент приходит в пекарню и говорит: «У меня было бы два пирога, пожалуйста!», Как я могу создать экземпляр CakeBakery. Конечно, я могу создать абстрактный завод вроде:
public static Bakery createBakery(final String orderedBakegood)
{
switch(bakegood)
{
case "Cake": return new CakeBakery();
case "Bread": return new BreadBakery();
default: throw new InvalidBakeryException();
}
}
Но я не хочу использовать инструкции switch или if. Есть ли другая возможность, или я совершенно не согласен с пониманием?
Что не так с оператором switch или if? Вам нужно как-то принять решение. – Philipp
Коммутатор может работать, но вам нужно открыть его для расширения. Это означает, что вы должны переопределить его, поэтому метод не должен быть статическим. Другое решение - отражение, оно более гибкое. Я хотел бы посмотреть, что другие говорят об этом, я тоже столкнулся с этой проблемой. – Filkolev
@Filkolev Учитывая, что он пытается придерживаться хороших стандартов и узоров, использование отражения здесь будет похоже на то, чтобы стрелять в лицо, потому что вы хотите нарисовать свою стену. – Kayaman