느낌 상으로는 Template Method 패턴의 확장팩 버전 같다.
인스턴스 생성할 클래스(Product)와 생성시켜주는 클래스(Factory)의 형태를 미리 정의(abstract)해놓고
하위 클래스에서 둘 다 구현시켜줌.
이 때, Template Method 패턴과 동일하게 생성되는 과정(예: 각종 옵션 값에 따라서 생성되는 인스턴스를 달리해주고 생성된 인스턴스 고유번호를 어디에 저장하고 등등..)은 클래스(Factory)에서 구현되어 있음.
다시 간단하게 설명하면
제품과 공장 및 제품 생성 구조(뼈대)는 이미 구성되어 있고 나머지는 하위 클래스에서 모두 구현한다고 보면 된다.
// 제품 frame
public abstract class Product {
public abstract void print();
}
// 공장 frame
public abstract class Factory {
protected abstract Product createProduct(String name);
// 제품 인스턴스가 생성되는 과정은 고정
public final Product create(String name){
Product product = createProduct(name);
product.setNumber(랜덤 숫자값);
return product;
}
}
// 제품 구현
public class Phone extends Product {
private String name;
private int number;
Phone(String name){
this.name = name;
}
public void setNumber(int number){
this.number = number;
}
public void print(){
System.out.println("제품 종류 : 휴대폰");
}
}
// 공장 구현
public class PhoneFactory extends Factory {
// 직접 제품 생성은 하위 클래스에서
protected Product createProduct(String name){
return new Phone(name);
}
}
'CS > 디자인 패턴' 카테고리의 다른 글
Template Method (0) | 2023.09.16 |
---|---|
디자인 패턴 종류 (0) | 2023.09.16 |