feat : Design Pattern - 컴포지트(Composite) 패턴 구현
This commit is contained in:
@@ -143,6 +143,13 @@
|
|||||||
|
|
||||||
### 컴포지트(Composite) 패턴
|
### 컴포지트(Composite) 패턴
|
||||||
|
|
||||||
|
#### 구현 요구사항
|
||||||
|
|
||||||
|
- 프랜차이즈 기업의 정산은 가맹점으로 가입된 모든 가게들의 정산을 포함한다.
|
||||||
|
- 프랜차이즈 기업은 다른 프랜차이즈 기업을 포함할 수 있다.
|
||||||
|
- 프랜차이즈 기업은 이름을 갖는다.
|
||||||
|
- 프랜차이즈 가맹점은 이름을 갖는다.
|
||||||
|
|
||||||
### 널(Null) 객체 패턴
|
### 널(Null) 객체 패턴
|
||||||
|
|
||||||
## 참고자료
|
## 참고자료
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.composite.after
|
||||||
|
|
||||||
|
class FranchiseeApplication
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val coffeeCorporation = FranchiseeCorporation("커피프린스")
|
||||||
|
coffeeCorporation.addStore(FranchiseeStore("1호점"))
|
||||||
|
coffeeCorporation.calculate()
|
||||||
|
|
||||||
|
println()
|
||||||
|
println("가맹점 정산을 완료했습니다.")
|
||||||
|
println()
|
||||||
|
|
||||||
|
val franchiseeCorporation = FranchiseeCorporation("모두의 프랜차이즈")
|
||||||
|
franchiseeCorporation.addStore(coffeeCorporation)
|
||||||
|
franchiseeCorporation.calculate()
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.composite.after
|
||||||
|
|
||||||
|
class FranchiseeCorporation(
|
||||||
|
private val name: String,
|
||||||
|
private val stores: MutableList<Store> = mutableListOf()
|
||||||
|
) : Store {
|
||||||
|
fun addStore(store: Store) {
|
||||||
|
stores.add(store)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun removeStore(store: Store) {
|
||||||
|
stores.remove(store)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun calculate() {
|
||||||
|
for (store in stores) {
|
||||||
|
store.calculate()
|
||||||
|
}
|
||||||
|
println("프랜차이즈 기업 [$name]의 정산을 완료했습니다.")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.composite.after
|
||||||
|
|
||||||
|
class FranchiseeStore(
|
||||||
|
val name: String
|
||||||
|
) : Store {
|
||||||
|
override fun calculate() {
|
||||||
|
println("프랜차이즈 가게 [$name]이(가) 정산을 진행합니다.")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.composite.after
|
||||||
|
|
||||||
|
interface Store {
|
||||||
|
fun calculate()
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.composite.before
|
||||||
|
|
||||||
|
class FranchiseeApplication
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val coffeeCorporation = FranchiseeCorporation("커피프린스")
|
||||||
|
coffeeCorporation.addStore(FranchiseeStore("1호점"))
|
||||||
|
coffeeCorporation.calculateAllStores()
|
||||||
|
|
||||||
|
println()
|
||||||
|
println("가맹점 정산을 완료했습니다.")
|
||||||
|
println()
|
||||||
|
|
||||||
|
val franchiseeCorporation = FranchiseeCorporation("모두의 프랜차이즈")
|
||||||
|
franchiseeCorporation.addCorporation(coffeeCorporation)
|
||||||
|
franchiseeCorporation.calculateAllCorporations()
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.composite.before
|
||||||
|
|
||||||
|
class FranchiseeCorporation(
|
||||||
|
private val name: String,
|
||||||
|
private val corporations: MutableList<FranchiseeCorporation> = mutableListOf(),
|
||||||
|
private val stores: MutableList<FranchiseeStore> = mutableListOf()
|
||||||
|
) {
|
||||||
|
fun addCorporation(franchiseeCorporation: FranchiseeCorporation) {
|
||||||
|
corporations.add(franchiseeCorporation)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun removeCorporation(franchiseeCorporation: FranchiseeCorporation) {
|
||||||
|
corporations.remove(franchiseeCorporation)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addStore(store: FranchiseeStore) {
|
||||||
|
stores.add(store)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun removeStore(store: FranchiseeStore) {
|
||||||
|
stores.remove(store)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun calculateAllCorporations() {
|
||||||
|
for (corporation in corporations) {
|
||||||
|
corporation.calculateAllStores()
|
||||||
|
}
|
||||||
|
println("프랜차이즈 기업 [$name]의 정산을 완료했습니다.")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun calculateAllStores() {
|
||||||
|
for (store in stores) {
|
||||||
|
store.calculate()
|
||||||
|
}
|
||||||
|
println("프랜차이즈 기업 [$name]의 정산을 완료했습니다.")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.composite.before
|
||||||
|
|
||||||
|
class FranchiseeStore(
|
||||||
|
val name: String
|
||||||
|
) {
|
||||||
|
fun calculate() {
|
||||||
|
println("프랜차이즈 가게 [$name]이(가) 정산을 진행합니다.")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user