Builder 패턴 정리

구름코딩·2020년 10월 23일

Java 디자인 패턴

목록 보기
4/12

장점

코드 읽기/유지보수가 매우 편리하다

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>

HTML클래스와 내부 클래스인 HTMLbuilder클래스 구현

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;
        }
    }
}
profile
내꿈은 숲속의잠자는공주

0개의 댓글