본문 바로가기

카테고리 없음

많이 쓰이는 디자인패턴

반응형

다이어그램 그리기  https://1ilsang.blog.me/221104669002


[생성패턴] 


[1].싱글톤 패턴(singleton)

=어떤 클래스가 오직 하나의 객체만을 갖도록 하며, 프로그램 전반에 걸쳐 그객체 하나만 사용되도록 보장해야한다. 

-정확히 하나만 생성되어야 하는 전역객체(global object)를 구현해야 하는 경우에 특히 유용하다.


<예 >

public class Restaurant{

private static Restaurant _instance=null;

protected  Restaurant() { . . . }

public static Restaurant getInstance() {

         if(_instance==null){

                   _instance = new Restaurant();

          }

          return _instance;

    }


많은 사람들이 싱글톤 디자인 패턴을 좋아하지 않고 심지어 '안티-패턴' 이라고 부르기도 한다.

싱글톤을 싫어하는 이유 중 하나는 싱글톤이 단위 테스트(unit test)에 방해 되는 요인이기 때문이다. 


[2].팩터리메서드(factory method)

=어떤 클래스의 객체를 생성하기 위한 인터페이스를 제공하되, 하위 클래스에서 어떤 클래스를 생성할지 결정할 수 있도록 도와준다. 

-이를 구현하는 방법 

   1). Factory 메소드 자체에 대한 구현은 제공하지 않고 객체 생성 클래스를 abstract 로 선언하고 놔두는 것 

   2). Factory 메서드를 실제로 구현한 creator 클래스를 만드는 것이다. 이 경우에는 Factory 메서드에 생성해야 할 클래스를 인자로 넘겨줘         야 한다.


 < 예 >

public class CardGame {

      public static CardGame createCardGame (GameType type) {

             if(type == GameType.Poker) {

                           return new PokerGame();

             } else if ( type == GameType.BlackJack) {

                           return new BlackJackGame();

              }

             return null;

          }

}


출처 : 코딩인터뷰 189가지 프로그래밍 문제와 해법 완전분석 (프로그래밍 인사이트 )


[3].추상팩토리패턴(Abstract Factory)

=객체를 생성할 때 객체를 구성하는 부분을 추상화하여 여러 서브클래스가 상속을 통해 구현하여 구성하는 부분을 동일하게 유지하는 방법


-구현법:

 실제 만들어지는 객체는 각각의 하위 클래스에 해당하는 것이어도 client 가 참조하는 자료형은 상위의 추상클래스임을 의미 


<패턴이 유용한 경우>

1).추상 팩토리 클래스 패턴은 기존 팩토리 패턴의 if-else 로직에서 벗어날 수 있게 해준다.

2).여러 제품군 중 사용할 제품군을 쉽게 선택할 수 있도록 만들고 싶을때 

3). 추상 팩토리 클래스 패턴은 확장에 매우 용의한 패턴으로 쉽게 다른 서브 클래스들을 확장할 수 있다.


<장점>

클래스의 객체가 생성되는 부분만 변경시켜주면 얼마든지 다른 제품군을 생성하도록 바꿀 수 있다. 


출처:http://leetaehoon.tistory.com/58?category=212584<-이동해서 소스보기


[4].빌더 패턴(Builder)

=복잡한 객체의 생성을 표현으로 부터 분리시키는 것



출처:http://leetaehoon.tistory.com/57?category=212584

 

[구조패턴] 

[1].데코레이터 패턴 


[행위 패턴] 

[1].옵저버 패턴 https://1ilsang.blog.me/221104669002

[2].반복자 패턴 http://supercoding.tistory.com/33

반응형