diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md b/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md index b2bea4b..bb6276a 100644 --- a/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md @@ -64,6 +64,12 @@ ### 전략(Strategy) 패턴 +#### 구현 요구사항 + +- 연령대별로 물건의 할인된 금액 계산기를 구현한다. + - 아이일 경우 할인율은 15%이다. + - 어른일 경우 할인율은 30%이다. + ### 템플릿 메서드(Template Method) 패턴 ### 상태(State) 패턴 diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/AgeTypeAfter.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/AgeTypeAfter.kt new file mode 100644 index 0000000..dd707c7 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/AgeTypeAfter.kt @@ -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 }), +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/PriceCalculatorAfter.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/PriceCalculatorAfter.kt new file mode 100644 index 0000000..665156c --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/PriceCalculatorAfter.kt @@ -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 +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/PriceCalculatorApplicationAfter.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/PriceCalculatorApplicationAfter.kt new file mode 100644 index 0000000..5de0bc1 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/PriceCalculatorApplicationAfter.kt @@ -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) +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/AgeTypeBefore.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/AgeTypeBefore.kt new file mode 100644 index 0000000..8e52a9d --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/AgeTypeBefore.kt @@ -0,0 +1,6 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.strategy.before + +enum class AgeTypeBefore { + KIDS, + ADULTS, +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/PriceCalculatorApplicationBefore.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/PriceCalculatorApplicationBefore.kt new file mode 100644 index 0000000..d3dcc1f --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/PriceCalculatorApplicationBefore.kt @@ -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) +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/PriceCalculatorBefore.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/PriceCalculatorBefore.kt new file mode 100644 index 0000000..b0764b8 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/PriceCalculatorBefore.kt @@ -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 + } + } +}