팩토리 패턴(Factory Pattern)
객체의 생성을 추상화하여 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴
장점
상위 클래스와 하위 클래스가 분리되기 때문에 의존성이 낮으며 상위 클래스에서는 인스턴스 생성 방식에 대해 알 필요가 없기 때문에 더 많은 유연성을 가짐 -> 하위 클래스의 인스턴스 생성 방식을 바꿔도 상위 클래스는 코드를 수정할 필요가 없음(알 필요 없음)
구현 예시
package DesignPattern;
//Super Class인 Coffee
abstract class Coffee {
public abstract int getPrice();
@Override
public String toString() {
return "Hi this coffee is " + this.getPrice();
}
}
// Factory Class
class CoffeeFactory {
public static Coffee getCoffee(String type, int price) {
if ("Latte".equalsIgnoreCase(type)) {
return new Latte(price);
} else if ("Americano".equalsIgnoreCase(type)) {
return new Americano(price);
} else {
return new DefaultCoffee();
}
}
}
//Sub Class인 DefaultCoffee, Latte, Americano
class DefaultCoffee extends Coffee {
private int price;
public DefaultCoffee() {
this.price = -1;
}
@Override
public int getPrice() {
return this.price;
}
}
class Latte extends Coffee {
private int price;
public Latte(int price) {
this.price = price;
}
@Override
public int getPrice() {
return this.price;
}
}
class Americano extends Coffee {
private int price;
public Americano(int price) {
this.price = price;
}
@Override
public int getPrice() {
return this.price;
}
}
public class HelloWorld {
public static void main(String[] arg) {
Coffee latte = CoffeeFactory.getCoffee("Latte", 4000);
Coffee ame = CoffeeFactory.getCoffee("Americano", 3000);
System.out.println("Factory latte ::" + latte);
System.out.println("Factory latte ::" + ame);
}
}
// 출력값
/*
Factory latte : Hi this coffee is 4000
Factory ame : Hi this coffee is 3000
*/

Reference
면접을 위한 CS 전공지식 노트 - 주홍철
https://readystory.tistory.com/117
https://velog.io/@ellyheetov/Factory-Pattern
'CS > Design Pattern' 카테고리의 다른 글
| [디자인 패턴] 싱글톤 패턴 (0) | 2022.08.11 |
|---|