팩토리 패턴(Factory Pattern)
- 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서,
상위 클래스가 중요한 뼈대를 결정하고 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴
- 상위 클래스와 하위 클래스가 분리 되기 때문에 느슨한 결합을 지님.
- 객체 생성한 인터페이스는 미리 정의하고, 객체 생성은 서브클래스(팩토리)로 위임함
package designpattern.factory;
abstract class Coffee {
public abstract int getPrice();
@Override
public String toString() {
return "Hi this coffee is " + this.getPrice();
}
}
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;
}
}
class CoffeFactory {
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();
}
}
}
public class Main {
public static void main(String[] args) {
Coffee latte = CoffeFactory.getCoffee("Latte", 4000);
Coffee ame = CoffeFactory.getCoffee("Americano", 3000);
System.out.println("Factory latte :: " + latte);
System.out.println("Factory ame :: " + ame);
}
}
팩토리 패턴의 장점
1. 클라이언트 코드로부터의 인스턴스화를 제거하여, 서로간의 종속성을 낮추고 결합을 느슨하게 하고, 쉬운 확장을 가능케 한다. => 객체 지향 성질중 하나인 다형성을 이용하였기 때문에, 인터페이스를 구현한 객체들은 같은 인터페이스를 상속받았기 대문에 유연함이 있음.
728x90
반응형
'Design Pattern' 카테고리의 다른 글
Iterator Pattern (0) | 2023.06.18 |
---|---|
프록시 패턴 (0) | 2023.06.18 |
Observer Pattern (0) | 2023.06.17 |
전략 패턴 - Strategy Pattern (0) | 2023.06.11 |
디자인 패턴과 Singleton Pattern (0) | 2023.06.11 |