본문 바로가기
프로그래밍/JAVA

Builder 패턴

by 낭만가을 2020. 2. 1.

1. Builder 패턴이란?

bulider pattern은 창조적 디자인 패턴(creational patter) 에 속합니다. 이것은 factory pattern 또는 abstract factory pattern과 매우 비슷합니다.

builder pattern은 선택적인 파라메터가 많을 경우 제공 상태를 일관성 있게 해주고, object를 생성시킬때 step-by-step으로 만들 수 있도록 제공해주며 최종에는 만들어진 object를 리턴한다

2. 예제


// Product 클래스 를 만들고 그안에 Builder 패턴을 사용하는 ProductBuilder 빌더를 만듭니다.
package com.designpattern.builder;

public class Product {
    private String name;
    private int price;
    private boolean isSell;

    private Product(ProductBuilder builder){
        this.name = builder.name;
        this.price = builder.price;
        this.isSell = builder.isSell;
    }

    public void ToString(){
        System.out.println("name : " + name);
        System.out.println("price : " + String.valueOf(price));
        System.out.println("isSell : " + String.valueOf(isSell));
    }

    public static class ProductBuilder{
        private String name;
        private  int price;
        private boolean isSell;

        public ProductBuilder setName(String name){
            this.name = name;
            return this;
        }

        public  ProductBuilder setPrice(int price){
            this.price = price;
            return this;
        }

        public  ProductBuilder setIsSellEnabled(boolean isSell){
            this.isSell = isSell;
            return this;
        }

        public Product build(){
            return new Product(this);
        }
    }
}


 

//테스트
package com.designpattern.builder;

public class testBuilder {
    public static void main(String[] args){
        Product product = new Product.ProductBuilder()
                .setIsSellEnabled(true)
                .setName("모나미볼펜")
                .setPrice(1000).build();
        product.ToString();
    }
}

//결과
name : 모나미볼펜
price : 1000
isSell : true

3. 자바에서 쓰이는 builder 패턴

java.lang.StringBuilder

은 대표적인 빌더 패턴이라고 볼수 있습니다.
시간이 되실때 소스를 보시면 많은 도움이 될것입니다.


'프로그래밍 > JAVA' 카테고리의 다른 글

Hashtable, HashMap, ConcurrentHashMap 비교  (0) 2020.02.14
Template 패턴  (0) 2020.02.01
Adapter 패턴  (0) 2020.02.01
Iterator 패턴  (0) 2020.02.01
Factory 패턴  (0) 2020.02.01

댓글