디자인패턴

Posted by ironmask84
2017. 4. 1. 15:06 나는 프로그래머다!/기초 다지기


  • 생성 디자인 패턴
    • 싱글톤패턴
      • 어떤 클래스의 인스턴스 개수가 최대 한 개를 넘지 않도록 하는 패턴
      • 이 하나의 인스턴스는 공유자원에 대한 문지기 또는 중앙에 있는 소통의 중심 역할을 한다.
      • 애플리케이션에서 새 인스턴스를 만들 수 없으며, 모든 메소드는 싱글톤을 통해서만 액세스할 수 있다.
      • 애플리케이션에서는 클래스에 있는 정적 메소드를 호출하여 싱글톤을 가져온다.
      • 상속과 인터페이스(싱글톤은 객체다. 따라서 베이스 클래스로부터 상속을 받고 인터페이스를 구현할 수 있다.)
      • 다수 객체로 전환 가능(나중에 마음이 바뀌어 여러 객체를 만들고자 하는 경우에 코드를 많이 바꾸지 않고도 원하는 바를 이룰 수 있다.)
      • 동적 바인딩(싱글통을 생성하기 위해 실제로 사용하는 클래스를 컴파일시가 아닌 실행시에 결정할 수 있다.)
      • 싱글턴 패턴을 구현 할 때는 private 생성자와 정적 메소드, 정적 변수를 사용한다. 

 

 public class Singleton {

1
2
3
4
5
6
7
8
9
 private static Singleton uniqueInstance;
 
 private Singleton(){} //다른 클래스에서 new키워드를 사용할 수 없게 된다.
 public static Singleton getInstance(){  //그래서 getInstance()를 사용할 수 밖에 없다.
  if(uniqueInstance == null){
   uniqueInstance = new Singleton();
  }
  return uniqueInstance;
 }


 

  • 빌더패턴
    • 객체가 어떤 식으로 구축되는지에 대해 모르는 상황에서 단계별로 객체를 생성하는 패턴이다.
    • 객체를 직접 구축하는 대신 빌더의 인스턴스를 만들고 빌더에서 객체를 직접 구축하는 대신 빌더의 인스턴스를 만들고 빌더에서 객체를 대신 만들도록 하는 방식이다.
    • 객체를 초기화하는 데 여러 생성자 매개변수가 필요한 경우, 그 중에서도 특히 동일 또는 유사한 유형의 매개변수가 여럿 필요한 경우에 특히 이 빌더 패턴이 유용하다.
    • 빌더패턴 예시

 

 적용 전

 적용 후

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Window{
 
     public Window(bloolean visible,boolean modal,boolean diaog){
 
         this.visible=visible;
 
         this.modal=modal;
 
         this.dialog=dialog;
 
     }
 
 
 
    private boolean visible;
 
    private boolean modal;
 
    private boolean dialog;
 
}


  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class WindowBuilder{
 
 
 
   public WindowBuilder(){}
 
   
 
   public WindowBuilder setDialog(boolean flag){
 
  
 
        dialog=flag;
 
        return this;
 
    }
 
   public WindowBuilder setModal(boolean flag){
 
  
 
        modal=flag;
 
        return this;
 
    }
 
   public WindowBuilder setVisible(boolean flag){
 
  
 
        visible=flag;
 
        return this;
 
    }
 
   public Window build(){
 
         return new Window(visible,modal,dialog);
 
    }
 
    private boolean visible;
 
    private boolean modal;
 
    private boolean dialog;