feat : Design Pattern - 상태(State) 패턴 구현
This commit is contained in:
@@ -82,6 +82,15 @@
|
||||
|
||||
### 상태(State) 패턴
|
||||
|
||||
#### 구현 요구사항
|
||||
|
||||
- 상태별로 다르게 움직이는 게임 캐릭터를 구현한다.
|
||||
- 기본적으로 게임 캐릭터는 정지상태이다.
|
||||
- 정지 상태에서 버튼을 누르면 이동한다.
|
||||
- 이동하는 상태에서 버튼을 누르면 점프한다.
|
||||
- 점프하는 상태에서 버튼을 누르면 착지한 뒤 정지한다.
|
||||
- 게임 캐릭터는 버튼을 누르면 동작하는 상태로 스스로의 상태를 변경한다.
|
||||
|
||||
### 데코레이터(Decorator) 패턴
|
||||
|
||||
### 프록시(Proxy) 패턴
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.state.after
|
||||
|
||||
class GameCharacterApplicationAfter
|
||||
|
||||
fun main() {
|
||||
val gameCharacter = GameCharacter()
|
||||
gameCharacter.move()
|
||||
gameCharacter.move()
|
||||
gameCharacter.move()
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.state.after
|
||||
|
||||
interface State {
|
||||
fun move(gameCharacter: GameCharacter)
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.state.before
|
||||
|
||||
class GameCharacterApplicationBefore
|
||||
|
||||
fun main() {
|
||||
val gameCharacter = GameCharacter()
|
||||
gameCharacter.move()
|
||||
gameCharacter.move()
|
||||
gameCharacter.move()
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.state.before
|
||||
|
||||
enum class State {
|
||||
STOPPING,
|
||||
MOVING,
|
||||
JUMPING,
|
||||
}
|
||||
Reference in New Issue
Block a user