Впервые попробовал билдер в java называется, теперь переписывать . Правильная ли имплементация патерна билдер для джавы, особенно если считать, что Cat - это вложенный статичный класс? Мне не нравится, что я могу конструктор Cat в main вызвать.(извиняюсь за комментарий в коде, немножко пригорело)
package com.javarush.task.task06.task0621;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
Родственные связи кошек
*/
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// Да идите нахуй, какие 6 объектов в main, я тут паттерны знаете ли юзаю
for(int i = 0; i < 6; i++){
new Cat("");
}
Cat catGrandfather = Cat.newBuilder(reader.readLine()).build();
Cat catGrandmother = Cat.newBuilder(reader.readLine()).build();
Cat catFather = Cat.newBuilder(reader.readLine()).setFather(catGrandfather).build();
Cat catMother = Cat.newBuilder(reader.readLine()).setMother(catGrandmother).build();
Cat catSon = Cat.newBuilder(reader.readLine()).setMother(catMother).setFather(catFather).build();
Cat catDaughter = Cat.newBuilder(reader.readLine()).setMother(catMother).setFather(catFather).build();
System.out.println(catGrandfather);
System.out.println(catGrandmother);
System.out.println(catFather);
System.out.println(catMother);
System.out.println(catSon);
System.out.println(catDaughter);
}
public static class Cat {
private String name;
private Cat mother;
private Cat father;
private Cat(String name){
this.name = name;
}
public String getName() {
return name;
}
public Cat getMother() {
return mother;
}
public Cat getFather() {
return father;
}
public static Builder newBuilder(String name) {
return new Cat(name).new Builder();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("The cat's name is ").append(name).append(", ");
if (mother == null)
sb.append("no mother");
else
sb.append("mother is ").append(mother.name);
sb.append(", ");
if (father == null)
sb.append("no father");
else
sb.append("father is ").append(father.name);
return sb.toString();
}
public class Builder {
private Builder() {
// private constructor
}
public Builder setMother(Cat mother) {
Cat.this.mother = mother;
return this;
}
public Builder setFather(Cat father) {
Cat.this.father = father;
return this;
}
public Cat build() {
return Cat.this;
}
}
}
}