private static class Team {
public final List<Player> players;
public Team(List<Player> players) {
this.players = Collections.unmodifiableList(players);
}
public static TeamBuilder builder() {
return new TeamBuilder();
}
static class TeamBuilder {
private List<Player.PlayBuilder> playerBuilders = new ArrayList<>();
public TeamBuilder add(Player.PlayBuilder builder) {
playerBuilders.add(builder);
return this;
}
public Team build() {
List<Player> players = new ArrayList<>();
for (Player.PlayBuilder playerBuilder : playerBuilders)
players.add(playerBuilder.build());
return new Team(players);
}
}
static class Player {
public final String name;
Player(String name) {
this.name = name;
}
public static PlayBuilder builder() {
return new PlayBuilder();
}
static class PlayBuilder {
private String name;
public Player build() {
return new Player(name);
}
public PlayBuilder setName(String name) {
this.name = name;
return this;
}
}
}
}
假设我们要构建一棵树。我们有一个节点
下面是一个流利的构建器的例子。即调用可以组合成链来构建树
在构建器内部,为了表示不完整的树,我使用了一个单独的类,因为这个类有一个到父级的链接,并且用它遍历节点更方便。从理论上讲,可以根据需要积累有关正在构建的对象的信息。
好吧,实际上,使用:
我会冒着引用来源的风险。结果发现了很多代码:
像这样使用:
主要思想是为每个对象创建自己的构建器,然后将其转移到另一个对象,依此类推。