Любые предложения для меня по рефакторингу класса, все статические методы одинаковы, отличается только одна переменная code.
public class SuccessResponseBuilder {
static ResponseCode code = ResponseCode.OK;
public static <T> @NotNull ResponseBean build() {
return ResponseBean.builder(code, null);
}
public static <T> ResponseBean build(T data) {
return ResponseBean.builder(code, data);
}
}
public class ErrorResponseBuilder {
static ResponseCode code = ResponseCode.ERROR;
public static <T> @NotNull ResponseBean build() {
return ResponseBean.builder(code, null);
}
public static <T> ResponseBean build(T data) {
return ResponseBean.builder(code, data);
}
}
Клиент будет использовать этот способ для получения результата
ErrorResponseBuilder.build(e.getMessage());SuccessResponseBuilder.build("ok");




Вот гибкий, чистый подход. Основная идея — создать внутренний Builder класс. Преимущество в том, что вы можете просто добавить новый ResponseCode, не создавая новый класс.
public class ResponseBean {
private final ResponseCode code;
private Object data;
private ResponseBean(ResponseCode code) {
this.code = code;
}
private ResponseBean(ResponseCode code, Object data) {
this.code = code;
this.data = data;
}
public static Builder ok() {
return new Builder(ResponseCode.OK);
}
public static Builder error() {
return new Builder(ResponseCode.ERROR);
}
/* if you would like to create a new ResponseCode:
public static Builder yourNewCode() {
return new Builder(ResponseCode.NEW_CODE);
}
*/
public static class Builder {
private final ResponseCode code;
public Builder(ResponseCode code) {
this.code = code;
}
public ResponseBean build() {
return new ResponseBean(code);
}
public ResponseBean build(Object data) {
return new ResponseBean(code, data);
}
}
}
Использование:
public void print() {
ResponseBean okResponse = ResponseBean.ok().build("This is ok data");
ResponseBean okResponseWithoutData = ResponseBean.ok().build();
ResponseBean errorResponse = ResponseBean.error().build("This is error data");
ResponseBean errorResponseWithoutData = ResponseBean.error().build();
System.out.println(okResponse);
System.out.println(okResponseWithoutData);
System.out.println(errorResponse);
System.out.println(errorResponseWithoutData);
}
Выход будет
ResponseBean(code=OK, data=This is ok data)
ResponseBean(code=OK, data=null)
ResponseBean(code=ERROR, data=This is error data)
ResponseBean(code=ERROR, data=null)
Спасибо за ваше предложение! С внутренним классом как Builder. Архитектура станет более понятной.