如何在 Java 中实现已检查的构建器模式
How to implement a checked builder pattern in Java
我正在尝试实现一个已检查的构建器模式,类似于它在本文中的描述:
https://dev.to/schreiber_chris/creating-complex-objects-using-checked-builder-pattern
我试图达到的结果如下:
Builder builder = new Builder('TestVal')
.when('this').then(new Set<String> {'val1','val2'})
.when('that').then(new Set<String> {'val3','val4'});
并且生成的对象将包含一个集合,其中包含任意数量的 whens
以及相关联的 thens
例如像这样的地图(when()
的参数是唯一的):
'this' => ['val1','val2'],
'that' => ['val3','val4']
我正在为一些事情苦苦挣扎:
- 如何将传入
then()
的值与值相关联
传入 when()
- 如何要求
then()
之后调用
when()
。 (例如 - .when('this').when('that') //invalid
最简单的方法是使用多个接口来强制执行调用顺序,然后使用该知识关联您的项目。例如,沿着这些线的东西:
interface Then{
When then(Set<String> values);
}
interface When{
Then when(String condition);
}
class Builder implements When, Then{
public static When create(){ return new Builder(); }
private Map<String, Set<String>> storedMappings = new HashMap<>();
private String currentCondition;
private Builder(){ }
public Then when(String condition){
currentCondition = condition;
return this;
}
public When then(Set<String> values){
storedMappings.put(currentCondition, values);
return this;
}
}
我正在尝试实现一个已检查的构建器模式,类似于它在本文中的描述: https://dev.to/schreiber_chris/creating-complex-objects-using-checked-builder-pattern
我试图达到的结果如下:
Builder builder = new Builder('TestVal')
.when('this').then(new Set<String> {'val1','val2'})
.when('that').then(new Set<String> {'val3','val4'});
并且生成的对象将包含一个集合,其中包含任意数量的 whens
以及相关联的 thens
例如像这样的地图(when()
的参数是唯一的):
'this' => ['val1','val2'],
'that' => ['val3','val4']
我正在为一些事情苦苦挣扎:
- 如何将传入
then()
的值与值相关联 传入when()
- 如何要求
then()
之后调用when()
。 (例如 -.when('this').when('that') //invalid
最简单的方法是使用多个接口来强制执行调用顺序,然后使用该知识关联您的项目。例如,沿着这些线的东西:
interface Then{
When then(Set<String> values);
}
interface When{
Then when(String condition);
}
class Builder implements When, Then{
public static When create(){ return new Builder(); }
private Map<String, Set<String>> storedMappings = new HashMap<>();
private String currentCondition;
private Builder(){ }
public Then when(String condition){
currentCondition = condition;
return this;
}
public When then(Set<String> values){
storedMappings.put(currentCondition, values);
return this;
}
}