From d05562f5322b10f4b20dc7871d6271c082671d34 Mon Sep 17 00:00:00 2001 From: banjjoknim Date: Thu, 10 Nov 2022 16:52:03 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20Design=20Pattern=20-=20=EC=A0=84?= =?UTF-8?q?=EB=9E=B5(Strategy)=20=ED=8C=A8=ED=84=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solid-design-pattern-sample/README.md | 6 ++++++ .../designpattern/strategy/after/AgeTypeAfter.kt | 6 ++++++ .../designpattern/strategy/after/PriceCalculatorAfter.kt | 11 +++++++++++ .../strategy/after/PriceCalculatorApplicationAfter.kt | 11 +++++++++++ .../designpattern/strategy/before/AgeTypeBefore.kt | 6 ++++++ .../strategy/before/PriceCalculatorApplicationBefore.kt | 11 +++++++++++ .../designpattern/strategy/before/PriceCalculatorBefore.kt | 10 ++++++++++ 7 files changed, 61 insertions(+) create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/AgeTypeAfter.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/PriceCalculatorAfter.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/after/PriceCalculatorApplicationAfter.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/AgeTypeBefore.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/PriceCalculatorApplicationBefore.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/strategy/before/PriceCalculatorBefore.kt 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 + } + } +}