У меня есть иерархия интерфейсов, в которой Child
реализует Parent
.Я хотел бы работать с неизменяемыми объектами, поэтому я хотел бы проектировать Builder
классы, которые удобно конструируют эти объекты.Тем не менее, у меня много Child
интерфейсов, и я не хочу повторять код для построения Parent
s для каждого типа дочернего компоновщика.
Итак, предположим следующие определения:
public interface Parent {
public Long getParentProperty();
}
public interface Child1 extends Parent {
public Integer getChild1Property();
}
public interface Child2 extends Parent {
public String getChild2PropertyA();
public Object getChild2PropertyB();
}
Как эффективно реализовать компоновщики Child1Builder
и Child2Builder
?Они должны поддерживать такие операции, как:
Child1 child1 = Child1Builder.newChild1().withChild1Property(5).withParentProperty(10L);
и
Child2 child2 = Child2Builder.newChild2().withChild2PropertyA("Hello").withParentProperty(10L).withChild2PropertyB(new Object());
Я не хочу реализовывать специальный случай withParentProperty
для каждого дочернего компоновщика.
Отредактировано, чтобы добавить второе свойство к Child2
, чтобы уточнить, что это нельзя сделать с помощью простых обобщений.Я не ищу способ объединения Child1
и Child2
- я ищу способ реализации системы Builder
, которая не дублирует работу по созданию родительского класса для каждого дочернего класса.
Спасибо за любую помощь!