Я относительно новичок в шаблонах Java и дизайна. Я пытаюсь реализовать шаблон Builder для своего приложения. У меня есть interface
, у которого есть метод build
, этот метод build
примет класс в качестве параметра и вернет то же самое.
public interface TestInterface {
public TestInterface withTest(int start);
public <T> T build();
}
На данный момент я реализовал этот interface
в одном классе и переопределил методы в классе GenerateBuilder
, и он отлично работает.
public class GenerateNumbers {
private String start;
private GenerateGSRN(GenerateBuilder builder) {
this.start = builder.start;
}
public static class GenerateBuilder implements TestInterface {
private String start;
@Override
public TestInterface withGcp(String start) {
this.start = start;
return this;
}
@Override
public GenerateNumbers build() {
return new GenerateNumbers(this);
}
}
}
Но я хочу переместить класс GenerateBuilder
, который переопределяет методы, в свой собственный отдельный класс, чтобы его мог использовать любой другой класс (сделайте его общим, чтобы мне не пришлось писать этот код снова).
Но, как мы видим, функция GenerateBuilder
Build
тесно связана с GenerateNumbers
, из-за чего я не могу ее переместить. Я хочу изменить метод Build
в Interface
, а также во время overriding
, чтобы он возвращал экземпляр класса вызывающему классу.
Например: если GenerateNumbers
вызывает метод сборки, то метод build
должен возвращать GenerateNumbers
. Если вызывается GenerateNumbersRandom
, то метод build
должен возвращать экземпляр GenerateNumbersRandom
.
Я пробовал пару вещей, но не работал:
В интерфейсе: public <T> T build(Class clazz);
В переопределении:
@Override
public <T> T build(Class clazz) {
return clazz.newInstance();
}
Надеюсь, я смог правильно объяснить проблему. Может кто-нибудь предложить мне, как сделать эту работу.
final
? - person Vincent C.   schedule 06.01.2021build
возвращал экземпляр дочернего класса, который вызывает его. Например, в этом случае, когдаGenerateNumbers
делает вызов, он должен создатьGenerateNumbers
, аналогичный тому, как я это сделал сейчас в жестко закодированном значении. - person BATMAN_2008   schedule 06.01.2021GenerateNumbers
, но выдающих разные результаты. Если я не создам универсальный класс, то в конечном итоге я напишу один и тот же код в каждом классе, но с другим именем класса. Следовательно, я хотел бы создать универсальный класс, чтобы я мог использовать его во всех классах и не должен создавать этот класс во всех классах, которые я создаю. - person BATMAN_2008   schedule 06.01.2021