State Pattern - dnwls16071/Backend_Summary GitHub Wiki
π State Pattern μ€λͺ
- 무μΈκ°μ 'μν'κ° κ°κ°μ ν΄λΉνλ ν΄λμ€μ κ°μ²΄λ‘ μ‘΄μ¬νλ€.
- κ°μ²΄μ λ΄λΆ μνμ λ°λΌ νλμ΄ λ¬λΌμ ΈμΌ ν λ, κ·Έλ¦¬κ³ μνκ° μμ£Ό λ³κ²½λ λ μ¬μ©νκΈ° μ ν©νλ€.
[Ex1]
public interface State {
void open(Door door);
void close(Door door);
}
// λ¬Έμ΄ λ«ν μν
public class ClosedState implements State {
@Override
public void open(Door door) {
System.out.println("Door is now Open.");
door.setState(new OpenState());
}
@Override
public void close(Door door) {
System.out.println("Door is already Closed.");
}
}
// λ¬Έμ΄ μ΄λ¦° μν
public class OpenState implements State {
@Override
public void open(Door door) {
System.out.println("Door is already Open.");
}
@Override
public void close(Door door) {
System.out.println("Door is now Closed.");
door.setState(new ClosedState());
}
}
public class Door {
private State state; // μνλ₯Ό λ©€λ²λ³μλ‘ κ°μ§λ€.
public Door() {
this.state = new ClosedState();
}
public void setState(State state) {
this.state = state;
}
public void open() {
state.open(this);
}
public void close() {
state.close(this);
}
}
[Ex2]
public interface State {
void play(VideoPlayer player);
void stop(VideoPlayer player);
}
public class StoppedState implements State {
@Override
public void play(VideoPlayer player) {
System.out.println("Starting the video.");
player.setState(new PlayingState());
}
@Override
public void stop(VideoPlayer player) {
System.out.println("Video is already stopped.");
}
}
// νλ μ΄ μν
public class PlayingState implements State {
@Override
public void play(VideoPlayer player) {
System.out.println("Video is already playing.");
}
@Override
public void stop(VideoPlayer player) {
System.out.println("Pausing the video.");
player.setState(new PausedState());
}
}
// μ μ§ μν
public class PausedState implements State {
@Override
public void play(VideoPlayer player) {
System.out.println("Resuming the video.");
player.setState(new PlayingState());
}
@Override
public void stop(VideoPlayer player) {
System.out.println("Stopping the video.");
player.setState(new StoppedState());
}
}
public class VideoPlayer {
private State state; // μνλ₯Ό νλλ‘ κ°μ§λ€.
public VideoPlayer() {
// Set initial state Stopped
this.state = new StoppedState();
}
public void setState(State state) {
this.state = state;
}
public void play() {
state.play(this);
}
public void stop() {
state.stop(this);
}
}