feat : Design Pattern - 전략(Strategy) 패턴 구현

This commit is contained in:
banjjoknim
2022-11-10 16:52:03 +09:00
parent f0a16b9096
commit d05562f532
7 changed files with 61 additions and 0 deletions

View File

@@ -64,6 +64,12 @@
### 전략(Strategy) 패턴
#### 구현 요구사항
- 연령대별로 물건의 할인된 금액 계산기를 구현한다.
- 아이일 경우 할인율은 15%이다.
- 어른일 경우 할인율은 30%이다.
### 템플릿 메서드(Template Method) 패턴
### 상태(State) 패턴

View File

@@ -0,0 +1,6 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.strategy.after
enum class AgeTypeAfter(val discountPolicy: DiscountPolicy) {
KIDS(DiscountPolicy { price -> price * 70 / 100 }),
ADULTS(DiscountPolicy { price -> price * 90 / 100 }),
}

View File

@@ -0,0 +1,11 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.strategy.after
class PriceCalculatorAfter {
fun calculate(price: Int, discountPolicy: DiscountPolicy): Int {
return discountPolicy.calculate(price)
}
}
fun interface DiscountPolicy {
fun calculate(price: Int): Int
}

View File

@@ -0,0 +1,11 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.strategy.after
class PriceCalculatorApplicationAfter
fun main() {
val priceCalculator = PriceCalculatorAfter()
val price = 10000
val ageType = AgeTypeAfter.KIDS
val calculatedPrice = priceCalculator.calculate(price, ageType.discountPolicy)
println(calculatedPrice)
}

View File

@@ -0,0 +1,6 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.strategy.before
enum class AgeTypeBefore {
KIDS,
ADULTS,
}

View File

@@ -0,0 +1,11 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.strategy.before
class PriceCalculatorApplicationBefore
fun main() {
val priceCalculator = PriceCalculatorBefore()
val price = 10000
val ageTypeBefore = AgeTypeBefore.ADULTS
val calculatedPrice = priceCalculator.calculate(price, ageTypeBefore)
println(calculatedPrice)
}

View File

@@ -0,0 +1,10 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.strategy.before
class PriceCalculatorBefore {
fun calculate(price: Int, ageType: AgeTypeBefore): Int {
return when (ageType) {
AgeTypeBefore.KIDS -> price * 70 / 100
AgeTypeBefore.ADULTS -> price * 85 / 100
}
}
}