Java 상태 패턴은 객체의 상태를 독립적인 상태 객체로 캡슐화하고 객체의 동작을 상태 객체에서 분리하는 객체 지향 디자인 패턴입니다. 변경이 발생하면 객체가 내부 상태를 저장할 수 있습니다. 이 패턴은 모든 동작을 클래스에 넣는 대신 객체의 동작을 다른 상태 개체에 캡슐화합니다.
Java 상태 패턴은 일반적으로 다음 3가지 역할로 구성됩니다.
상태 인터페이스(State Interface):
구체 상태(Concrete State): 상태 인터페이스를 구현합니다. 특히 State 객체는 다양한 상태 구현입니다. : 여러 상태를 가진 객체입니다. 컨텍스트 객체는 런타임에 상태를 변경하여 동작을 변경할 수 있습니다.
Java 상태 구현을 위해 인터페이스 및 추상 클래스를 사용하는 등 패턴을 구현하는 방법은 다양합니다. 구체적인 구현 방법은 특정 요구 사항과 시나리오에 따라 다릅니다.
간단한 게임이 있다고 가정해 보겠습니다. 게임의 주인공은 다양한 상태에서 다양한 작업을 수행할 수 있습니다.
public interface State { /** * 移动 */ void move(); /** * 攻击 */ void attack(); }
Specific state
public class IdleState implements State{ /** * 移动 */ @Override public void move() { System.out.println("静止状态下不能移动..."); } /** * 攻击 */ @Override public void attack() { System.out.println("静止状态下不能攻击..."); } } public class MoveState implements State{ /** * 移动 */ @Override public void move() { System.out.println("移动中..."); } /** * 攻击 */ @Override public void attack() { System.out.println("移动状态下不能攻击..."); } } public class AttackState implements State{ /** * 移动 */ @Override public void move() { System.out.println("攻击状态下不能移动..."); } /** * 攻击 */ @Override public void attack() { System.out.println("攻击中..."); } }
Context
public class Context { private State state; public Context() { // 默认静止状态 this.state = new IdleState(); } public void setState(State state) { this.state = state; } /** * 移动 */ public void move() { state.move(); } /** * 攻击 */ public void attack() { state.attack(); } }
Test
public class Demo { public static void main(String[] args) { // 静止状态 Context context = new Context(); context.move(); context.attack(); // 移动状态 context.setState(new MoveState()); context.move(); context.attack(); // 攻击状态 context.setState(new AttackState()); context.move(); context.attack(); } }
Summary
Advantages
상태 패턴은 상태 클래스에 상태 전환 논리를 캡슐화하여 객체의 상태를 만듭니다.
상태 패턴을 사용하면 상태 전환이 더 간단해집니다.
단점
응용 시나리오
객체의 동작이 상태에 따라 달라지고 런타임에 상태가 변경될 수 있는 경우 상태 패턴은 변경이 발생할 때 좋은 선택입니다.
위 내용은 Java 상태 디자인 패턴을 사용하여 객체 상태 전환을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!