Factory Pattern이란?

▶객체 생성용 인터페이스는 서브클래스가 어떤클래스를 인스턴스화(객체 생성)할 지 결정할 수 있도록 합니다. 팩토리 메소드는 객체 생성을 서브 클래스에서 하도록 미룰 수 있게 해줍니다.

 

▶ 코드 요약: Store에서 계산기를 구매할 수 있습니다. 이때 계산기는 1 가지의 역할밖에 수행하지 못합니다. 사용자는 원하는 계산기를 구매합니다.

 

클래스 다이어그램과 코드를 확인하겠습니다.

 

1. Calculator interface

public interface Calculator {
    double execute(double n1, double n2);
}

2. CalculatorSet class

public class CalculatorSet {
    public Calculator orderCalculator(String name){
        if(name.equals("add")){
            return new AddCalculator();
        }
        else if(name.equals("minus")){
            return new MinusCalculator();
        }
        else if(name.equals("mul")){
            return new MulCalculator();
        }
        else{
            return new DivCalculator();
        }
    }
}

3. AddCalculator class

public class AddCalculator implements Calculator {
    @Override
    public double execute(double n1, double n2) {
        return n1+n2;
    }
}

4. MibusCalculator class

public class MinusCalculator implements Calculator{
    @Override
    public double execute(double n1, double n2) {
        return n1-n2;
    }
}

5. DivCalculator class

public class DivCalculator implements Calculator{
    @Override
    public double execute(double n1, double n2) {
        return n1/n2;
    }
}

6. MulCalculator class

public class MulCalculator implements Calculator{
    @Override
    public double execute(double n1, double n2) {
        return n1*n2;
    }
}

7. Main class

public class Main {
    public static void main(String[] args) {
        Store store = new Store();

        store.order("add");
        double result1 = store.execute(1, 2);
        System.out.println(result1);

        store.order("minus");
        double result2 = store.execute(3, 5);
        System.out.println(result2);
    }
}
// 출력 결과
//  3.0      
//  -2.0

위와 같이 CalculatorSet에서 어떠한 객체를 인스턴스화 할 것인지 판단해서 반환하는 형태로 Factory Pattern이 완성됩니다. 

다음에는 singleton Pattern을 알아보겠습니다. 감사합니다. 

 

전체 코드는 아래에서 확인 가능합니다:)

https://github.com/rlaehdals/design-pattern

 

GitHub - rlaehdals/design-pattern

Contribute to rlaehdals/design-pattern development by creating an account on GitHub.

github.com