팩토리 메소드 패턴 - '객체'와 '객체 생성 클래스'를 따로 분리하는 디자인 패턴
-> 객체 생성 클래스가 따로 분리되어 있어서, 객체 생성 변화에 유연하게 대비
예제)
1. 상품을 만드는 상품 생성자를 생성
2. 상품을 상속받아서 여러 개의 세부 상품(물, 휴지, 물티슈 등)을 구현한다.
1) 상품 생성자
public abstract class ProductCreator{
public Product create() {
// 템플릿 메소드 패턴 이용
final Map<String, String> productInfo = getProductInfo(); // 1. DB에서 상품 정보를 가져온다.
final Product product = createProduct(productInfo); // 2. 상품을 생성
return product;
}
protected abstract Map<String, String> getProductInfo();
protected abstract Product createProduct(Map<String, String> productInfo);
}
2) 물 상품을 생성하는 객체 생성
public class WaterCreator extends ProductCreator {
@Override
protected Map<String, String> getProductInfo() {
final Map<String, String> productInfo = new HashMap<>();
productInfo.put("name", "물");
productInfo.put("price", "1600");
...
return productInfo;
}
@Override
protected Product createProduct(Map<String, String> productInfo) {
return new Water(productInfo);
}
}
3. 휴지 상품을 생성하는 객체 생성
public class TissueCreator extends ProductCreator {
@Override
protected Map<String, String> getProductInfo() {
final Map<String, String> productInfo = new HashMap<>();
productInfo.put("name", "휴지");
productInfo.put("price", "2000");
...
return productInfo;
}
@Override
protected Product createProduct(Map<String, String> productInfo) {
return new Tissue(productInfo);
}
}
4. 메인 함수 구현
public class Main {
public static void main(String[] args){
final ProductCreator wc = new WaterCreator();
final Water water = (Water) water.create();
final ProductCreator tc = new TissueCreator();
final Tissue tissue = (Tissue) tissue.create();
}
}
'Java > 공부' 카테고리의 다른 글
백엔드 개발자 자바, 스프링 질문 완전정복 (0) | 2022.09.12 |
---|---|
자바 공부 (0) | 2022.09.12 |
SpringBoot 구조 정리 (0) | 2022.04.04 |