상세 컨텐츠

본문 제목

Abstract Factory Pattern 배워보기

Java

by techbard 2014. 1. 16. 21:59

본문

반응형

위키에 나온 소스를 많이들 참고하더라 나도 그걸로 배워보는 중이다.

 

이번에는 추상 팩토리 패턴이라고 하여, 인터페이스를 두 개를 사용해서 첫번째 인터페이스를 구현한 클래스의 리턴이 두 번째 인터페이스 타입이므로 그로부터 호출되는 메소드는 두 번째 인터페이스를 구현한 또 다른 클래스가 된다.

 

1. 기본이 되는 인터페이스를 작성한다. 주의깊게 볼 것은 리턴타입이 또 다른 인터페이스 타입이라는 것이다.

 

public interface IFactory {
 public IButton createButton();
}

 

2. 두 번째 인터페이스를 작성한다. 실제로 호출할 메소드 이름을 정의한다.

 

public interface IButton {
 public void paint();
}

 

3. 1번 인터페이스를 구현한다. 역시나 1번 인터페이스의 리턴 타입에 맞춰 IButton 타입의 객체를 반환한다.

 

public class WinFactory implements IFactory {

 @Override
 public IButton createButton() {
  return new WinButton();
 }
}

 

public class OSXFactory implements IFactory {

 @Override
 public IButton createButton() {
  return new OSXButton();
 }
}

 

4. 3번에서 반환한 객체는 IButton 인터페이스를 구현해야 하며, 실제 동작을 구현한다.

 

public class WinButton implements IButton {

 @Override
 public void paint() {
  System.out.println("WinButton");
 }
}

 

public class OSXButton implements IButton {

 @Override
 public void paint() {
  System.out.println("OSXButton");
 }
}

 

5. Application 클래스를 작성한다. 제일 처음 구현된 IFactory 타입을 받아 (IButton) 인터페이스로 캐스팅해서 button에 넣는다. 이 button을 통해 실제 담긴 객체의 paint() 메소드를 호출한다.

 

public class Application {
 
 public Application(IFactory factory) {
  IButton button = factory.createButton();
  button.paint();
 }
}

 

6. 이제 테스트 클래스를 작성해 보자.

 

public class ApplicationRunner {
 public static void main(String[] args) {
  new Application(createOsSpecificFactory());
 }
 
 public static IFactory createOsSpecificFactory() {
  int sys = 1;
  if (sys == 0) {
   return new WinFactory();
  } else {
   return new OSXFactory();
  }
 }
}

 

결과:

OSXButton (sys = 1 인 경우)

WinButton (sys = 0 인 경우)

 

 

 

@@ 복잡하다.

 

 

AbstractFactoryPattern.zip

 

반응형

관련글 더보기

댓글 영역