ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 생성패턴 : Factory Method 패턴
    디자인패턴 2013. 1. 10. 10:00
    반응형

    분류 : 생성패턴(Creational Patterns)


    다른 이름 : Virtual Constructor


    정의 :

    객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스에서 이루어지도록 서브클래스에게 인스턴스 생성의 책임을 미룸.

    용도 :

    • 생성할 객체 타입을 예측할 수 없을 때
    • 생성할 객체를 기술하는 책임을 서브클래스에 정의하고자 하는 경우
    • 객체 생성의 책임을 서브클래스에게 위임시키고 서브클래스에 대한 정보를 은닉하고자 하는 경우
    • 객체의 생성이 코드의 중요한 부분없이 재사용되는 것을 방지
    • 생성된 객체의 생명주기 관리가 애플리케이션안에서 일정한 행동을 보장하기위해 중앙집중해서 관리해야 할 경우.
    • 프레임워크나 툴킷등에 많이 쓰임.







    코드

    public interface Currency {
    	String getSymbol();
    }
    
    //Concrete Rupee Class code
    class Rupee implements Currency {
    
    	@Override
    	public String getSymbol() {
    		return "Rs";
    	}
    
    }
    
    //Concrete SGD class Code
    public class SGDDollar implements Currency {
    
    	@Override
    	public String getSymbol() {
    		return "SGD";
    	}
    
    }
    
    //Concrete US Dollar code
    public class USDollar implements Currency {
    
    	@Override
    	public String getSymbol() {
    		return "USD";
    	}
    
    }
    
    //Factory Class code
    public class CurrencyFactory {
    	
    	public static Currency createCurrency (String country) {
    	       if (country. equalsIgnoreCase ("India")){
    	              return new Rupee();
    	       }else if(country. equalsIgnoreCase ("Singapore")){
    	              return new SGDDollar();
    	       }else if(country. equalsIgnoreCase ("US")){
    	              return new USDollar();
    	        }
    	       throw new IllegalArgumentException("No such currency");
           }
    
    }
    
    //Factory client code
    public class Factory {
    
    	public static void main(String[] args) {
    
    		//아래 부분에서 주석 변경하면서 출력되는 코드 테스트
    		String country = "India";
    //		String country = "Singapore";
    //		String country = "US";
    		
            Currency rupee = CurrencyFactory.createCurrency(country);
            System.out.println(rupee.getSymbol());
    	}
    
    }
    
    



    참고자료

    GoF의 디자인패턴, 피어슨에듀케이션코리아, 2002

    http://en.wikipedia.org/wiki/Factory_method_pattern

    http://javarevisited.blogspot.kr/2011/12/factory-design-pattern-java-example.html?m=1

    반응형

    '디자인패턴' 카테고리의 다른 글

    생성패턴 : Singleton 패턴  (0) 2013.01.16
    생성패턴 : Prototype 패턴  (0) 2013.01.15
    생성패턴 : Builder 패턴  (0) 2012.12.28
    생성패턴 : Abstract Factory 패턴  (0) 2012.12.18
    디자인패턴  (0) 2012.11.13

    댓글

Designed by Tistory.