Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 추상 팩토리
- Design Pattern
- PrototypePattern
- Functional Programming
- F
- 함수형프로그래밍
- 추상팩토리패턴
- ㅓ
- 옵저버 패턴
- r
- Singleton
- 프로토타입 패턴
- 팩토리 메소드
- factory method
- 코틀린
- Kotlin
- 싱글톤
- Observer Pattern
- 빌터패턴
- Abstract Factory
- a
- 디자인패턴
- builderPattern
- designPattern
- ㅋㅁ
- El
- 디자인패턴 #
Archives
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Factory Method Pattern 팩토리 메소드 패턴 (feat. kotlin) 본문
정의
Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다.
- 객체를 이용하는 코드로 부터 객체를 생성하는 코드를 분리하여, Loose Coupling(느슨한 결합)을 이루어낸다.
- 상속(inheritance)에 많이 의존합니다.
- 객체생성의 구현부를 하위 클래스에 위임.
장점
- 코드에서 작동할 정확한 객체의 Type을 모르는 경우 사용한다.
- 독립적으로 Product 생성 코드를 쉽게 확장할 수 있습니다.
- 기존의 코드를 수정하지 않고 새로운 product를 추가하는데 쉽다.
- product 생성코드를 한 곳에 모아 쉽게 관리할 수 있다.
Abstract Product Class
abstract class Pizza {
abstract val name: String
abstract val dough: String
abstract val sauce: String
val toppings: MutableList<String> = mutableListOf()
// Do Stuff
fun prepare() {
println("준비 중: $name")
println("도우를 돌리는 중...")
println("소스를 뿌리는 중...")
println("토핑을 올리는 중...")
toppings.forEach { topping ->
println("$topping topping")
}
println("완성!")
}
}
Concreate Product Class
class CheesePizza: Pizza(){
override val name: String = "치즈 피자"
override val dough: String = "씬 크러스트 도우"
override val sauce: String = "마리나라 소스"
init {
toppings.add("잘게 썬 레지아노 치즈")
}
}
class PepperoniPizza: Pizza(){
override val name: String = "페퍼로니 치즈 피자"
override val dough: String = "씬 크러스트 도우"
override val sauce: String = "마리나라 소스"
init {
toppings.add("통 페퍼로니")
}
}
Abstract Creator Class
abstract class PizzaStore {
// 어떤 피자던 주문하는 과정 및 포장 처리는 변함이 없다.
fun orderPizza(): Pizza {
val pizza = createPizza()
pizza.prepare()
return pizza
}
// Factory Method
// 피자의 종류에 따라 실제 어떤 피자를 생성하여 반환 할지는 하위 클래스에서 결정하기로 한다.
protected abstract fun createPizza(): Pizza
}
Concreate Creator Class
class PepperoniPizzaStore : PizzaStore() {
override fun createPizza(): Pizza =
PepperoniPizza()
}
class CheesePizzaStore : PizzaStore() {
override fun createPizza(): Pizza =
CheesePizza()
}
'디자인패턴 > 생성패턴' 카테고리의 다른 글
Prototype Pattern(feat. kotlin) (0) | 2024.06.10 |
---|---|
Builder Pattern(feat. kotlin) (0) | 2024.06.06 |
Abstract Factory Pattern 추상 팩토리 패턴 (feat. kotlin) (0) | 2024.06.04 |
Singleton pattern 싱글톤 패턴(feat. kotlin) (0) | 2024.05.30 |
SimpleFactory pattern (0) | 2021.12.28 |