코드 읽기/유지보수가 매우 편리하다
public class BuilderPatter {
public static void main(String[] args) {
text();
}
private static void text()
{
Text text = new Text.Builder()
.setTitle("Hello")
.setContent("Name")
.setItems()
.build();
System.out.println(text);
}
}
위 방식의 코드를 생성자없이 내부 정적 클래스를 통해서 구현한 것이다. 따라서 기존에는 메소드 구현시 매개변수로 객체를 생성할때 계속 넣어줘야 하는데 그럴 필요없이 여러가지 조합을 항목을 넣고 빼는 방식으로 구현할 수 있다
위와 같은 방식을 이용해서 HTML의 양식을 자동으로 만들어주는 클래스를 생성할 수 있다
public class HTMLmaker {
public static void main(String[] args) {
HTML html = new HTML.HTMLbuilder()
.setTitle("제목")
.setBody(("내용"))
.setLi("항목1", "항목2", "항목3", "항목4")
.makeHTML();
System.out.println(html);
}
}
<html>
<title>제목</title>
<body>내용
<ul>
<li>항목1</li>
<li>항목2</li>
<li>항목3</li>
<li>항목4</li>
</ul>
</body>내용
</html>
package BuilderPattern;
import java.util.Optional;
public class HTML {
private String html;
@Override
public String toString() {
return html;
}
public static class HTMLbuilder
{
private String title;
private String body;
private Optional<String[]> li = Optional.empty();
public HTMLbuilder setTitle(String title) {
this.title = title;
return this;
}
public HTMLbuilder setBody(String body) {
this.body = body;
return this;
}
public HTMLbuilder setLi(String ... li) {
if (li.length > 0)
this.li = Optional.of(li);
else
this.li = Optional.empty();
return this;
}
public HTML makeHTML()
{
HTML HTML = new HTML();
StringBuilder sb = new StringBuilder();
sb.append("<html>").append("\n");
sb.append("<title>").append(title).append("</title>").append("\n");
sb.append("<body>").append(body).append("\n");
sb.append(" <ul>").append("\n");
if (!li.isEmpty()){
li.ifPresent(li -> {
for (String s : li)
sb.append(" ").append("<li>").append(s).append("</li>").append("\n");
});
}
sb.append(" </ul>").append("\n");
sb.append("</body>").append(body).append("\n");
sb.append("</html>").append("\n");
HTML.html = sb.toString();
return HTML;
}
}
}