1. 의도
부모 클래스에 알려지지 않는 구체 클래스를 생성하는 패턴이며,
자식 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴
2. 용도
객체 생성을 관리하고 확장 가능한 디자인을 유지해야 하는 시스템에서 많이 사용함
예를 들면, 라이브러리와 프레임워크에서 인스턴스 생성을 추상화할 때 사용함
3. UML
4. 구현
public abstract class Pizza {
protected Integer price;
protected PizzaType type;
public void print() {
System.out.println("이 피자는 " + type.name() + "피자이며 가격은 " + price + "원 입니다.");
}
}
=================================================================
public class CheesePizza extends Pizza {
protected CheesePizza() {
this.price = 8000;
this.type = PizzaType.CHEESE;
}
}
=================================================================
public class BaconPizza extends Pizza {
protected BaconPizza() {
this.price = 10000;
this.type = PizzaType.BACON;
}
}
=================================================================
public class SeafoodPizza extends Pizza {
protected SeafoodPizza() {
this.price = 15000;
this.type = PizzaType.SEAFOOD;
}
}
=================================================================
public interface PizzaFactory {
Pizza create();
}
=================================================================
public class CheesePizzaFactory implements PizzaFactory {
@Override
public Pizza create() {
return new CheesePizza();
}
}
=================================================================
public class BaconPizzaFactory implements PizzaFactory {
@Override
public Pizza create() {
return new BaconPizza();
}
}
=================================================================
public class SeafoodPizzaFactory implements PizzaFactory {
@Override
public Pizza create() {
return new SeafoodPizza();
}
}
=================================================================
public class Client {
public static void main(String[] args) {
PizzaFactory cheesePizzaFactory = new CheesePizzaFactory();
PizzaFactory baconPizzaFactory= new BaconPizzaFactory();
PizzaFactory seafoodPizzaFactory = new SeafoodPizzaFactory();
Pizza cheesePizza = cheesePizzaFactory.create();
Pizza baconPizza = baconPizzaFactory.create();
Pizza seafoodPizza = seafoodPizzaFactory.create();
cheesePizza.print();
baconPizza.print();
seafoodPizza.print();
}
}
//이 피자는 CHEESE피자이며 가격은 8000원 입니다.
//이 피자는 BACON피자이며 가격은 10000원 입니다.
//이 피자는 SEAFOOD피자이며 가격은 15000원 입니다.
=================================================================
5. 패턴의 장단점
- 장점
- Creator와 Product를 느슨하게 결합함
- 단일 책임 원칙을 지킴
- OCP 원칙을 지킬 수 있음
- 단점
- 많은 클래스를 정의해야 하기 때문에 코드량이 증가함
출처 :
https://refactoring.guru/design-patterns/factory-method
Factory Method
/ Design Patterns / Creational Patterns Factory Method Also known as: Virtual Constructor Intent Factory Method is a creational design pattern that provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objec
refactoring.guru
'디자인 패턴' 카테고리의 다른 글
자바(JAVA) - 프로토타입(Prototype) 패턴 (5) | 2023.11.20 |
---|---|
자바(JAVA) - 플라이 웨이트(Flyweight) 패턴 (0) | 2023.11.16 |
자바(JAVA) - 추상팩토리(Abstract Factory) 패턴 (2) | 2023.11.08 |
자바(JAVA) - 컴포지트(Composite) 패턴 (0) | 2023.11.02 |
자바(JAVA) - 커맨드(Command) 패턴 (0) | 2023.11.01 |