feat : Design Pattern - 데코레이터(Decorator) 패턴 구현
This commit is contained in:
@@ -93,6 +93,13 @@
|
||||
|
||||
### 데코레이터(Decorator) 패턴
|
||||
|
||||
#### 구현 요구사항
|
||||
|
||||
- 용사는 검을 가진다.
|
||||
- 용사는 검을 바꿀 수 있다.
|
||||
- 검에는 속성이 부여될 수 있으며, 속성에 따라 공격이 변한다.
|
||||
- 용사가 공격하면 소지한 무기의 공격이 발동된다.
|
||||
|
||||
### 프록시(Proxy) 패턴
|
||||
|
||||
#### 구현 요구사항
|
||||
@@ -118,8 +125,8 @@
|
||||
#### 구현 요구사항
|
||||
|
||||
- 주문의 상태가 변경되면 배송팀과 운영팀에 알리고, 각각의 팀은 그에 따른 조치를 취한다.
|
||||
- 배송팀은 배송을 시작한다.
|
||||
- 운영팀은 고객에게 메시지를 전송한다.
|
||||
- 배송팀은 배송을 시작한다.
|
||||
- 운영팀은 고객에게 메시지를 전송한다.
|
||||
- 배송팀과 운영팀 외에 다른 팀에도 필요하다면 또 다른 팀에 메시지를 전송해야 할 수도 있다.
|
||||
|
||||
### 미디에이터(Mediator) 패턴
|
||||
@@ -136,8 +143,8 @@
|
||||
|
||||
- 회원의 모든 정보를 조회한다.
|
||||
- 회원의 모든 정보에는 회원의 기본 정보와 친구들에 대한 정보가 있다.
|
||||
- 회원의 기본 정보에는 이름, 나이가 있다.
|
||||
- 회원의 친구 정보에는 친구의 이름, 나이가 있다.
|
||||
- 회원의 기본 정보에는 이름, 나이가 있다.
|
||||
- 회원의 친구 정보에는 친구의 이름, 나이가 있다.
|
||||
|
||||
### 추상 팩토리(Abstract Factory) 패턴
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.decorator.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common.Sword
|
||||
|
||||
class Fire(private val sword: Sword) : SwordDecorator() {
|
||||
override fun skill(): String {
|
||||
return "불꽃 ${sword.skill()}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.decorator.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common.Hero
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common.Sword
|
||||
|
||||
class HeroApplication
|
||||
|
||||
fun main() {
|
||||
val hero = Hero()
|
||||
hero.attack()
|
||||
|
||||
val fireSword = Fire(Sword.DEFAULT)
|
||||
hero.changeSword(fireSword)
|
||||
hero.attack()
|
||||
|
||||
val iceSword = Ice(Sword.DEFAULT)
|
||||
hero.changeSword(iceSword)
|
||||
hero.attack()
|
||||
|
||||
val fireIceSword = Fire(Ice(Sword.DEFAULT))
|
||||
hero.changeSword(fireIceSword)
|
||||
hero.attack()
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.decorator.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common.Sword
|
||||
|
||||
class Ice(private val sword: Sword) : SwordDecorator() {
|
||||
override fun skill(): String {
|
||||
return "얼음 ${sword.skill()}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.decorator.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common.Sword
|
||||
|
||||
abstract class SwordDecorator : Sword()
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.decorator.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common.Sword
|
||||
|
||||
class FireIceSword : Sword() {
|
||||
override fun skill(): String {
|
||||
return "화염 얼음 ${DEFAULT.skill()}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.decorator.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common.Sword
|
||||
|
||||
class FireSword : Sword() {
|
||||
override fun skill(): String {
|
||||
return "화염 ${DEFAULT.skill()}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.decorator.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common.Hero
|
||||
|
||||
class HeroApplication
|
||||
|
||||
fun main() {
|
||||
val hero = Hero()
|
||||
hero.attack()
|
||||
|
||||
val fireSword = FireSword()
|
||||
hero.changeSword(fireSword)
|
||||
hero.attack()
|
||||
|
||||
val iceSword = IceSword()
|
||||
hero.changeSword(iceSword)
|
||||
hero.attack()
|
||||
|
||||
val fireIceSword = FireIceSword()
|
||||
hero.changeSword(fireIceSword)
|
||||
hero.attack()
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.decorator.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common.Sword
|
||||
|
||||
class IceSword : Sword() {
|
||||
override fun skill(): String {
|
||||
return "얼음 ${DEFAULT.skill()}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common
|
||||
|
||||
class Hero(
|
||||
private var sword: Sword = Sword.DEFAULT
|
||||
) {
|
||||
fun changeSword(sword: Sword) {
|
||||
this.sword = sword
|
||||
}
|
||||
|
||||
fun attack() {
|
||||
val swordSkill = sword.skill()
|
||||
println("용사가 [$swordSkill]을 발동합니다.")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.decorator.common
|
||||
|
||||
abstract class Sword {
|
||||
abstract fun skill(): String
|
||||
|
||||
companion object {
|
||||
val DEFAULT = object : Sword() {
|
||||
override fun skill(): String {
|
||||
return "참격"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user