[Java_디자인패턴] 팩토리 패턴(Factory Pattern)

2020. 12. 5. 17:42백엔드/Java_디자인패턴

728x90

 

팩토리 패턴

  • 생성 할 클래스를 미리 알지 못해도 팩토리 클래스가 객체 생성을 담당
  • 객체의 자료형이 하위클래스에 의해서 결정(확장 용이성)
  • 동일한 형태로 프로그래밍 가능
  • 확장성 있는 전체 프로젝트 구성 가능
  • 객체가 늘어날 때 마다 하위 클래스 재정의로 인한 불필요한 많은 클래스 생성 가능성

 

 


 

TV interface

package polymorphism;

public interface TV{
    public void powerOn();
    public void powerOff();
    public void volumeUp();
    public void VolumeDown();
}

 

LgTV.java

package polymorphism;

public class LgTV implements TV{
    public void powerOn(){
        System.out.println("LgTV 전원켠다...");
    }
    public void powerOff(){
           System.out.println("LgTV 전원끈다...");
    }
    public void volumeUp(){
        System.out.println("LgTV 소리올린다...");
    }
    public void volumeDown(){
        System.out.println("LgTV 소리내린다...");
    }
}

 

 

SamsungTV.java

package polymorphism;

public class SamsungTV implements TV{
   public void powerOn(){
        System.out.println("SamsungTV 전원켠다...");
    }
    public void powerOff(){
           System.out.println("SamsungTV 전원끈다...");
    }
    public void volumeUp(){
        System.out.println("SamsungTV 소리올린다...");
    }
    public void volumeDown(){
        System.out.println("SamsungTV 소리내린다...");
    }
}

 

BeanFactory.java

package polymorphism;

public class BeanFactory{
    public Object getBean(String name){
        if(name.equals("samsung"){
        	return new SamsungTV();
        } else if(name.equals("lg"){
        	return new LgTV();
        }
        return null;
    }
}

 

TVUser.java

package polymorphism;

public class TVUser{
    public static void main(String[] args){
    
    	Beanfactory factory = new BeanFactory();
        Tv tv = (TV)factory.getBean("samsung");
        tv.powerOn();
        tv.volumeUp();
        tv.volumeDown();
        tv.powerOff();
    
    }
}

 

 

 

 

참고 : SPRING QUICK START[루비페이퍼-채규태지음] (교재) ,

        niceman.tistory.com/143

728x90