Java-Builder Pattern


  • Telescoping Pattern은 생성자 overloading을 말하며 인수가 여러개면 가독서이 떨어진다.
  • JavaBeans Pattern은 getter, sgetter 메소드를 이용하는 방법을 말한다. 하지만 중간에 객체 상태가 노출되고 초기화 과정에서 객체를 참조하면 문제가 된다. 또한 언제든지 객체가 변경 될 수 있기 때문에 immutable하지 않다.

이러한 객체 초기화 문제점들을 Builder Pattern으로 해결한다.

public class BuilderPattern { 
    private int a; 
    private int b; 
    private int c; 
    private int d; 
     
    public static class Builder{ 
        private int a; 
        private int b; 
        private int c; 
        private int d; 
         
        public Builder a(int a){ 
            this.a = a; 
            return this; 
        } 
        public Builder b(int b){ 
            this.b = b; 
            return this; 
        } 
        public Builder c(int c){ 
            this.c = c; 
            return this; 
        } 
        public Builder d(int d){ 
            this.d = d; 
            return this; 
        } 
        public BuilderPattern build(){ 
            return new BuilderPattern(this); 
        } 
    } 
    private BuilderPattern(Builder builder){ 
        a = builder.a; 
        b = builder.b; 
        c = builder.c; 
        d = builder.d; 
    } 
}

BuilderPattern builderPattern = new BuilderPattern.Builder().a(1).b(2).c(3).d(4).build();


출처

http://cleancodes.tistory.com/15


'Computer Science > Design Pattern' 카테고리의 다른 글

Java-Singleton Pattern  (0) 2017.08.22

Java-Singleton Pattern


  1. 생성자를 private으로 만든다. new를 막기 위함이다.
  2. private static final 변수를 내부에서 초기화
public class Singleton{
	private static final Singleton instance = new Singleton();
	private Singleton(){ }
	public static Singleton getInstance(){ return instance; }
}

Lazy Initialization: 필요할 때 객체를 생성해서 자원 낭비를 막는다.

public class Singleton{
	private static Singleton instance;
	private Singleton{}{ }
	
	public synchronized static Singleton getInstance(){
		if(instance == null){
			instance = new Singleton();
		}
		return instance;
	}
}

이 경우 getInstance 메소드 호출할 때 마다 동기화를 수행하기 때문에 성능 저하가 심하다.

DCL (Double-Checking Locking)방법

  • 인스턴스가 null인지 확인 한 후, null이면 동기화를 얻고 객체를 생성한다. 그리고 그 다음부터는 동기화를 하지 않아도 된다.
public class Singleton{
	private volatitle static Singleton instance;
	
	private Singleton(){}

	public static Singleton getInstance(){
		if(instance == null){
			synchronized(Singleton.class){
				if(instance == null){
					instance = new Singleton();
				}
			}
		}
	}
}

참고자료

http://cleancodes.tistory.com/14


'Computer Science > Design Pattern' 카테고리의 다른 글

Java-Builder Pattern  (0) 2017.08.22

+ Recent posts