[Design Pattern] 팩토리 메서드 패턴(Factory Method Pattern)
Posted: Updated:
자바 디자인 패턴 스터디를 하며 ‘Java 객체 지향 디자인 패턴’ 교재를 정리한 글입니다.
팩토리 메서드 패턴(Factory Method Pattern)
- 객체 생성의 변화에 대비
- 객체의 생성 코드를 별도의 클래스/메서드로 분리하는 방식
- 하위 클래스에서 적합한 클래스의 객체를 생성하는 방식
팩토리 메서드 패턴 컬레보레이션
- Product
- 팩토리 메서드로 생성될 객체의 공통 인터페이스
- ConcreteProduct
- 구체적으로 객체가 생성되는 클래스
- Creator
- 팩토리 메서드를 갖는 클래스
- ConcreteCreator
- 팩토리 메서드를 구현하는 클래스
ConcreteProduct
객체 생성
예시: 사과를 디저트로 제공하는 식당 클래스
전체 코드
public abstract class Apple {
public abstract void wash();
public abstract void peel();
public abstract void slice();
}
public class Busa extends Apple{
@Override
public void wash() {
System.out.println("부사: 물로 씻기");
}
@Override
public void peel() {
System.out.println("부사: 껍질 벗기기");
}
@Override
public void slice() {
System.out.println("부사: 자르기");
}
}
public class Hongok extends Apple {
@Override
public void wash() {
System.out.println("홍옥: 물로 씻기");
}
@Override
public void peel() {
System.out.println("홍옥: 껍질 벗기기");
}
@Override
public void slice() {
System.out.println("홍옥: 자르기");
}
}
public class Hongro extends Apple {
@Override
public void wash() {
System.out.println("홍로: 물로 씻기");
}
@Override
public void peel() {
System.out.println("홍로: 껍질 벗기기");
}
@Override
public void slice() {
System.out.println("홍로: 자르기");
}
}
public class AppleFactory {
public static Apple getApple(String kind) {
Apple apple = null;
if (kind.equals("busa")) {
apple = new Busa();
}
else if (kind.equals("hongok")) {
apple = new Hongok();
}
else if (kind.equals("hongro")) {
apple = new Hongro();
}
return apple;
}
}
public class Restaurant {
public Apple servingApple(String kind) {
Apple apple = null;
apple = AppleFactory.getApple(kind);
apple.wash();
apple.peel();
apple.slice();
return apple;
}
}
public class Home {
public Apple getAppleForBreakFast(String kind) {
Apple apple = null;
apple = AppleFactory.getApple(kind);
apple.wash();
return apple;
}
}
댓글남기기