프런트엔드/디자인 패턴
[1일차] 추상 팩토리 | 생성 패턴 5일만에 끝내기 챌린지 - GoF 디자인 패턴
조드래곤나인
2023. 7. 16. 14:39

출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『Gof의 디자인 패턴』. 김정아(역). 프로텍미디어, 2015.
[1일차] 추상 팩토리(Abstract Factory)
생성 패턴 5일만에 끝내기 챌린지 - GoF 디자인 패턴
타입스크립트로 설명하는 GoF 디자인 패턴의 생성 패턴 5일만에 끝내기 챌린지
추상 팩토리란?
구체적인 클래스를 지정하지 않고
관련성을 갖는 객체들의 집합을 생성하거나
서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴
활용성
1) 여러 제품군 중 하나를 선택해서 시스템을 설정해야 하고
한번 구성한 제품을 다른 것으로 대체할 수 있을 때
2) 관련된 제품 객체들이 함께 사용 되도록 설계되었고,
이 부분에 대한 제약이 외부에도 지켜지도록 하고 싶을 때
3) 제품에 대한 클래스 라이브러리를 제공하고,
그들의 구현이 아닌 인터페이스를 드러내고 싶을 때
구조 및 구현
interface AbstractFactory {
createProductA(): AbstractProductA
createProductB(): AbstractProductB
}
class ConcreteFactory1 implements AbstractFactory {
createProductA() {
return new ProductA1()
}
createProductB() {
return new ProductB1()
}
}
class ConcreteFactory2 implements AbstractFactory {
createProductA() {
return new ProductA2()
}
createProductB() {
return new ProductB2()
}
}
interface AbstractProductA { }
interface AbstractProductB { }
class ProductA1 implements AbstractProductA {}
class ProductA2 implements AbstractProductA {}
class ProductB1 implements AbstractProductB {}
class ProductB2 implements AbstractProductB {}
class Main {
factory: AbstractFactory
constructor() {
this.factory = new ConcreteFactory1()
this.factory.createProductA()
this.factory.createProductB()
}
}
// 다른 제품을 사용할 때
class Main {
factory: AbstractFactory
constructor() {
this.factory = new ConcreteFactory2()
this.factory.createProductA()
this.factory.createProductB()
}
}
ConcreteFactory 클래스의 인스턴스 한 개가 런타임에 만들어진다.
ConcreteFactory는 어떤 특정 구현을 갖는 제품 객체를 생성한다.
서로 다른 제품을 생성하려면 서로 다른 ConcreteFactory를 사용해야 한다.
공식 기술블로그 링크
더넥스트웹리서치랩
웹 클라이언트 기술을 전문적으로 연구하고 자료를 발행하는 기술 블로그를 운영합니다.
the-next-web-research-lab.github.io
728x90