-
생성패턴 : 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 댓글