일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- javascript
- jenkins
- devops
- linux
- Gradle
- Spring Batch
- redis
- Spring
- Oracle
- elasticsearch
- IntelliJ
- php
- 맛집
- Web Server
- MySQL
- ReactJS
- springboot
- tool
- java
- laravel
- db
- Git
- Design Patterns
- AWS
- 요리
- ubuntu
- jsp
- JVM
- it
- Spring Boot
Archives
- Today
- Total
아무거나
[Design Pattern] State Pattern 본문
반응형
상태 패턴(State Pattern)
일련의 규칙에 따라 객체의 상태(State)를 변화시켜, 객체가 할 수 있는 행위를 바꾸는 패턴이다.
어떤 Context라는 객체가 State을 가지고 있고, 그리고 Concrete인 StateA와 StateB가 있고 그거에 대한 어떠한 액션을 취하게 된다. 그 액션을 취한 것이 상태에 영향을 주게 된다.
상태 패턴 예시 - 1
불을 키고 끄는 예제를 만들자.
불을 켜고 끌 수 있는 Light 클래스를 생성
[Light.java]
package com.bkjeon.state;
public class Light {
protected LightState lightState;
private LightState offState = new LightState() {
@Override
public void on() {
// 꺼져 있는 상태에서 불을 켜있는 상태로 상태값을 변경
System.out.println("Light ON");
lightState = onState;
}
@Override
public void off() {
// 처음에 꺼져 있는 상태이므로 Nothing
System.out.println("Nothing");
}
};
private LightState onState = new LightState() {
@Override
public void on() {
// 처음에 켜져 있는 상태이므로 Nothing
System.out.println("Nothing");
}
@Override
public void off() {
// 켜져 있는 상태에서 불을 꺼있는 상태로 상태값을 변경
System.out.println("Light OFF");
lightState = offState;
}
};
public Light() {
lightState = offState;
}
public void on() {
lightState.on();
}
public void off() {
lightState.off();
}
}
// 상태를 가지고 있어야 하므로 구현
interface LightState {
void on();
void off();
}
메인 클래스 작성
[Main.java]
package com.bkjeon.state;
public class Main {
public static void main(String[] args) {
Light light = new Light();
light.off();
light.off();
light.off();
light.on();
light.on();
light.on();
light.off();
light.on();
light.off();
light.on();
light.off();
light.on();
}
}
실행결과
Nothing
Nothing
Nothing
Light ON
Nothing
Nothing
Light OFF
Light ON
Light OFF
Light ON
Light OFF
Light ON
전략패턴하고 비슷하지만 차이점이 있다.전략패턴은 알고리즘이 변경하는 거지만 상태패턴은 말 그대로 상태를 변경하는 것이다.
반응형
'Java & Kotlin > Java' 카테고리의 다른 글
[Design Pattern] Flyweight Pattern (0) | 2020.01.12 |
---|---|
[Design Pattern] Memento Pattern (0) | 2020.01.12 |
[Design Pattern] Mediator Pattern (0) | 2020.01.08 |
[Design Pattern] Observer Pattern (0) | 2020.01.05 |
[Design Pattern] Facade Pattern (0) | 2020.01.04 |
Comments