feat : Design Pattern - 추상 팩토리 패턴(Abstract Factory) 패턴 구현
This commit is contained in:
@@ -135,6 +135,12 @@
|
|||||||
|
|
||||||
### 추상 팩토리(Abstract Factory) 패턴
|
### 추상 팩토리(Abstract Factory) 패턴
|
||||||
|
|
||||||
|
#### 구현 요구사항
|
||||||
|
|
||||||
|
- 과일 이름을 입력하면 해당 과일 또는 과일주스를 만들어주는 마법이 있다.
|
||||||
|
- 과일의 종류는 사과, 바나나, 오렌지로 총 세 가지다.
|
||||||
|
- 과일주스의 종류도 마찬가지로 사과주스, 바나나주스, 오렌즈주스로 총 세 가지다.
|
||||||
|
|
||||||
### 컴포지트(Composite) 패턴
|
### 컴포지트(Composite) 패턴
|
||||||
|
|
||||||
### 널(Null) 객체 패턴
|
### 널(Null) 객체 패턴
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.after
|
||||||
|
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.Apple
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.AppleJuice
|
||||||
|
|
||||||
|
class AppleMagic : Magic {
|
||||||
|
override fun createFruit() {
|
||||||
|
val apple = Apple()
|
||||||
|
println("과일 [${apple.name}]를 만들었습니다!")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createJuice() {
|
||||||
|
val appleJuice = AppleJuice()
|
||||||
|
println("과일주스 [${appleJuice.name}]을 만들었습니다!")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.after
|
||||||
|
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.Banana
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.BananaJuice
|
||||||
|
|
||||||
|
class BananaMagic : Magic {
|
||||||
|
override fun createFruit() {
|
||||||
|
val banana = Banana()
|
||||||
|
println("과일 [${banana.name}]를 만들었습니다!")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createJuice() {
|
||||||
|
val bananaJuice = BananaJuice()
|
||||||
|
println("과일주스 [${bananaJuice.name}]을 만들었습니다!")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.after
|
||||||
|
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.FruitType
|
||||||
|
|
||||||
|
interface Magic {
|
||||||
|
companion object {
|
||||||
|
fun getMagic(fruitType: FruitType): Magic {
|
||||||
|
return when (fruitType) {
|
||||||
|
FruitType.APPLE -> AppleMagic()
|
||||||
|
FruitType.BANANA -> BananaMagic()
|
||||||
|
FruitType.ORANGE -> OrangeMagic()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createFruit()
|
||||||
|
|
||||||
|
fun createJuice()
|
||||||
|
}
|
||||||
|
|
||||||
|
//abstract class Magic {
|
||||||
|
// companion object {
|
||||||
|
// fun getMagic(fruitType: FruitType): Magic {
|
||||||
|
// return when (fruitType) {
|
||||||
|
// FruitType.APPLE -> AppleMagic()
|
||||||
|
// FruitType.BANANA -> BananaMagic()
|
||||||
|
// FruitType.ORANGE -> OrangeMagic()
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// abstract fun createFruit()
|
||||||
|
//
|
||||||
|
// abstract fun createJuice()
|
||||||
|
//}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.after
|
||||||
|
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.FruitType
|
||||||
|
|
||||||
|
class MagicApplication
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val fruitType = FruitType.APPLE
|
||||||
|
val magic = Magic.getMagic(fruitType)
|
||||||
|
magic.createFruit()
|
||||||
|
magic.createJuice()
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.after
|
||||||
|
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.Orange
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.OrangeJuice
|
||||||
|
|
||||||
|
class OrangeMagic : Magic {
|
||||||
|
override fun createFruit() {
|
||||||
|
val orange = Orange()
|
||||||
|
println("과일 [${orange.name}]를 만들었습니다!")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createJuice() {
|
||||||
|
val orangeJuice = OrangeJuice()
|
||||||
|
println("과일주스 [${orangeJuice.name}]을 만들었습니다!")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.before
|
||||||
|
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.Apple
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.AppleJuice
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.Banana
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.BananaJuice
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.FruitType
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.Orange
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.OrangeJuice
|
||||||
|
|
||||||
|
class Magic {
|
||||||
|
fun createFruit(type: FruitType) {
|
||||||
|
val fruit = when (type) {
|
||||||
|
FruitType.APPLE -> Apple()
|
||||||
|
FruitType.BANANA -> Banana()
|
||||||
|
FruitType.ORANGE -> Orange()
|
||||||
|
}
|
||||||
|
println("과일 [${fruit.name}]를 만들었습니다!")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createJuice(type: FruitType) {
|
||||||
|
val juice = when (type) {
|
||||||
|
FruitType.APPLE -> AppleJuice()
|
||||||
|
FruitType.BANANA -> BananaJuice()
|
||||||
|
FruitType.ORANGE -> OrangeJuice()
|
||||||
|
}
|
||||||
|
println("과일주스 [${juice.name}]을 만들었습니다!")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.before
|
||||||
|
|
||||||
|
import com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common.FruitType
|
||||||
|
|
||||||
|
class MagicApplication
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val magic = Magic()
|
||||||
|
val fruitType = FruitType.APPLE
|
||||||
|
magic.createFruit(fruitType)
|
||||||
|
magic.createJuice(fruitType)
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common
|
||||||
|
|
||||||
|
enum class FruitType {
|
||||||
|
APPLE,
|
||||||
|
BANANA,
|
||||||
|
ORANGE
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common
|
||||||
|
|
||||||
|
interface Fruit {
|
||||||
|
val name: String
|
||||||
|
}
|
||||||
|
|
||||||
|
data class Apple(override val name: String = "사과") : Fruit
|
||||||
|
|
||||||
|
data class Banana(override val name: String = "바나나") : Fruit
|
||||||
|
|
||||||
|
data class Orange(override val name: String = "오렌지") : Fruit
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.abstractfactory.common
|
||||||
|
|
||||||
|
interface Juice {
|
||||||
|
val name: String
|
||||||
|
}
|
||||||
|
|
||||||
|
data class AppleJuice(override val name: String = "사과주스") : Juice
|
||||||
|
|
||||||
|
data class BananaJuice(override val name: String = "바나나주스") : Juice
|
||||||
|
|
||||||
|
data class OrangeJuice(override val name: String = "오렌지주스") : Juice
|
||||||
Reference in New Issue
Block a user