객체 생성을 캡슐화하고, 생성되는 구체적인 객체의 유형을 클라이언트 코드로부터 분리하는 데 사용됨
객체 생성을 담당하는 팩토리 클래스를 도입. 클라이언트 코드는 팩토리 클래스를 통해 객체를 생성하며, 이를 통해 클라이언트 코드는 구체적인 객체의 클래스에 대한 지식 없이도 해당 객체를 얻을 수 있음
생성될 객체에 대한 인터페이스를 정의
제품 인터페이스를 구현한 실제 객체들
객체를 생성하는 메서드를 선언한 인터페이스
팩토리 인터페이스를 구현하여 객체를 생성하는 구체적인 클래스들
팩토리 클래스를 통해 객체를 생성하는 주체로, 구체적인 객체의 클래스에 대한 지식 없이도 객체를 생성 가능자
// 제품 인터페이스
class Product {
display() {
throw new Error("Method 'display' must be implemented");
}
}
// 구체적인 제품 클래스
class ConcreteProductA extends Product {
display() {
console.log("Product A");
}
}
class ConcreteProductB extends Product {
display() {
console.log("Product B");
}
}
// 팩토리 인터페이스
class Factory {
createProduct() {
throw new Error("Method 'createProduct' must be implemented");
}
}
// 구체적인 팩토리 클래스
class ConcreteFactoryA extends Factory {
createProduct() {
return new ConcreteProductA();
}
}
class ConcreteFactoryB extends Factory {
createProduct() {
return new ConcreteProductB();
}
}
// 클라이언트
const factoryA = new ConcreteFactoryA();
const productA = factoryA.createProduct();
productA.display(); // 출력: Product A
const factoryB = new ConcreteFactoryB();
const productB = factoryB.createProduct();
productB.display(); // 출력: Product B