feat : Design Pattern - 상태(State) 패턴 구현

This commit is contained in:
banjjoknim
2022-11-10 17:49:51 +09:00
parent b8853e5a30
commit 588b4c41b5
8 changed files with 98 additions and 0 deletions

View File

@@ -82,6 +82,15 @@
### 상태(State) 패턴
#### 구현 요구사항
- 상태별로 다르게 움직이는 게임 캐릭터를 구현한다.
- 기본적으로 게임 캐릭터는 정지상태이다.
- 정지 상태에서 버튼을 누르면 이동한다.
- 이동하는 상태에서 버튼을 누르면 점프한다.
- 점프하는 상태에서 버튼을 누르면 착지한 뒤 정지한다.
- 게임 캐릭터는 버튼을 누르면 동작하는 상태로 스스로의 상태를 변경한다.
### 데코레이터(Decorator) 패턴
### 프록시(Proxy) 패턴

View File

@@ -0,0 +1,13 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.state.after
class GameCharacter(
private var state: State = StoppingState()
) {
fun move() {
state.move(this)
}
fun changeState(newState: State) {
this.state = newState
}
}

View File

@@ -0,0 +1,10 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.state.after
class GameCharacterApplicationAfter
fun main() {
val gameCharacter = GameCharacter()
gameCharacter.move()
gameCharacter.move()
gameCharacter.move()
}

View File

@@ -0,0 +1,5 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.state.after
interface State {
fun move(gameCharacter: GameCharacter)
}

View File

@@ -0,0 +1,22 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.state.after
class StoppingState : State {
override fun move(gameCharacter: GameCharacter) {
println("캐릭터가 이동한다.")
gameCharacter.changeState(MovingState())
}
}
class MovingState : State {
override fun move(gameCharacter: GameCharacter) {
println("캐릭터가 점프한다.")
gameCharacter.changeState(JumpingState())
}
}
class JumpingState : State {
override fun move(gameCharacter: GameCharacter) {
println("캐릭터가 착지한 뒤 정지한다.")
gameCharacter.changeState(StoppingState())
}
}

View File

@@ -0,0 +1,22 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.state.before
class GameCharacter(
private var state: State = State.STOPPING
) {
fun move() {
when (state) {
State.STOPPING -> {
println("캐릭터가 이동한다.")
this.state = State.MOVING
}
State.MOVING -> {
println("캐릭터가 점프한다.")
this.state = State.JUMPING
}
State.JUMPING -> {
println("캐릭터가 착지한 뒤 정지한다.")
this.state = State.STOPPING
}
}
}
}

View File

@@ -0,0 +1,10 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.state.before
class GameCharacterApplicationBefore
fun main() {
val gameCharacter = GameCharacter()
gameCharacter.move()
gameCharacter.move()
gameCharacter.move()
}

View File

@@ -0,0 +1,7 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.state.before
enum class State {
STOPPING,
MOVING,
JUMPING,
}