2021.11.18_팩토리메소드패턴05.자바와스프링에서찾아보는패턴
본문 바로가기
CS Study/디자인패턴

2021.11.18_팩토리메소드패턴05.자바와스프링에서찾아보는패턴

by KyeongMin 2021. 11. 18.
728x90
반응형

팩토리 메소드 패턴

  • 실무에서 어떻게 쓰이나?
  • 단순한 팩토리 패턴
    • 매개변수의 값에 따라 또는 메소드에 따라 각기 다른 인스턴스를 리턴하는 단순한 버전의 팩토리 패턴
    • java.lang.Calendar 또는 java.lang.NumberFormat
  • 스프링 BeamFactory
    • Object 타입의 Product를 만드는 BeamFactory라는 Creator!

단순한 팩토리 패턴

  • 하나의 구현체 두고 그것에 대해서 구현체를 만드는 모양임

SimpleFactory

public class SimpleFactory{
    public Object createProduct(String name){
        if(name.equals("Whiteship")){
            return new Whiteship();
        }else (name.equals("blackship")){
            return new Blackship();
        }
        throw new IllegalArgumentException();; 
    }
}
  • 이런것을 simpleFactory 패턴이라고함

자바에서 제공하는 Calendar

  • 이것이 simpleFactory로 만들어져있음
System.out.println(Calendar.getInstance().getClass());
System.out.println(Calendar.getInstance(Locale.forLanguageTag("th-Th-x-lvariant-TH")).getClass());
System.out.println(Calendar.getInstance(Locale.forLanguageTag("ja-JP-x-lvariant-JP")).getClass());
  • 오버로딩된 메소드같이 넘겨서 가져오거나하면 인스턴스가 달라진다.
  • 매게변수 넘기는것이랑 아닌것이 다르다는 소리

Spring의 BeamFactory

  • 이것이 팩토리 패턴을 구현한 구현체이다.
public class SpringBeanFactoryExample{
    public static void main(String[] args){
        BeanFactory xmlFactory = new ClassPathXmlApplicationContext("config.xml");
        String hello = xmlFactory.getBean("hello",String.class);
        System.out.println(hello);
        
        BeanFactory javaFactory = new AnnotationConfigApplicationContext(Config.class);
        String hi = javaFactory.getBean("hello",String.class);
        System.out.println(hi);
    }
}
  • 여기서 BeanFactory가 Creator 인터페이스라고 생가하면되고,
    • 구현체는 ConcreateCreator임
    • getBean이 Object로 넘겨줌 - product에 해당함

Config.class

@Configuration
public class Cofig{
    @Bean
    public String hello(){
        return "hello";
    }
}
  • 이런것들이 ConcreateProduct에 해당한다.
728x90
반응형

댓글