java Abstract factory Pattern 실습해보기
Abstract factory pattern은 다양한 구성 요소 별로 ‘객체의 집합’을 생성해야 할 때 유용합니다.
즉, 수 많은 서브 클래스들을 그룹으로 묶어서 한번에 사용할 수 있다고 합니다.
코드
이 코드에서는 윈도우와 우분투라는 OS에서 주요 특징을 메소드로 잡은 상태입니다.
public interface Windows {
public void gui();
}
public interface Ubuntu {
public void bash();
}
위 두 인터페이스 클래스를 만들어서 각 OS의 특징을 선언만 합니다.
public class XP implements Windows {
@Override
public void gui() {
System.out.println("graphic user interface");
}
}
윈도우의 세부 버전의 클래스를 만들어서 위 인터페이스를 오버라이딩합니다.
그러면 선언만 되어 추상화된 메소드를 구현하게 됩니다.
예시 코드이므로 VOID 형태로 했습니다.
public class LTS implements Ubuntu {
@Override
public void bash() {
System.out.println("long term service");
}
}
우분투에서도 장기 지원 버전을 세부 클래스로 만들어서 우분투 인터페이스를 상속합니다.
상속받은 추상화된 메소드를 구현합니다.
public interface Ifactory {
public Ubuntu getUbuntu();
public Windows getWIN();
}
이 패턴의 이름답게 공장(Factory) 인터페이스를 만들어 줍니다.
그리고 각 OS 제품을 가져오기 위한 getter 메소드를 추상화합니다.
public class Factory implements Ifactory {
@Override
public Ubuntu getUbuntu() {
return new LTS();
}
@Override
public Windows getWIN() {
return new XP();
}
}
위 공장 인터페이스를 구현한 공장 클래스입니다.
반환 타입이 인터페이스이며, 반환받는 새로운 객체는 그 인터페이스를 구현한 클래스 객체입니다.
public class Main {
public static void main(String[] args) {
Ifactory test = new Factory();
test.getUbuntu().bash();
test.getWIN().gui();
}
}
메인 클래스는 테스트 차원에서 제작되었으며, 간단하게 공장에서 새로운 객체를 생성해 getter로 객체를 얻어온 다음, 각 OS 별 특징 메소드를 불러오게 됩니다.
Written on February 8, 2018