> Java > java지도 시간 > 본문

Java 상태 디자인 패턴을 사용하여 객체 상태 전환을 구현하는 방법

WBOY
풀어 주다: 2023-05-13 11:52:15
앞으로
968명이 탐색했습니다.

소개

Java 상태 패턴은 객체의 상태를 독립적인 상태 객체로 캡슐화하고 객체의 동작을 상태 객체에서 분리하는 객체 지향 디자인 패턴입니다. 변경이 발생하면 객체가 내부 상태를 저장할 수 있습니다. 이 패턴은 모든 동작을 클래스에 넣는 대신 객체의 동작을 다른 상태 개체에 캡슐화합니다.

Java 상태 패턴은 일반적으로 다음 3가지 역할로 구성됩니다.

  • 상태 인터페이스(State Interface):

  • 구체 상태(Concrete State): 상태 인터페이스를 구현합니다. 특히 State 객체는 다양한 상태 구현입니다. : 여러 상태를 가진 객체입니다. 컨텍스트 객체는 런타임에 상태를 변경하여 동작을 변경할 수 있습니다.

  • Java 상태 구현을 위해 인터페이스 및 추상 클래스를 사용하는 등 패턴을 구현하는 방법은 다양합니다. 구체적인 구현 방법은 특정 요구 사항과 시나리오에 따라 다릅니다.

  • Implementation

간단한 게임이 있다고 가정해 보겠습니다. 게임의 주인공은 다양한 상태에서 다양한 작업을 수행할 수 있습니다.

State 인터페이스

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();
    }
}
로그인 후 복사

In 위의 예에서는 먼저 State 인터페이스를 정의합니다. 세 가지 특정 상태 클래스인 IdleState, MoveState 및 AttackState는 각각 주인공의 유휴 상태, 이동 상태 및 공격 상태를 나타냅니다. 다음으로 현재 상태를 나타내는 State 개체가 포함된 컨텍스트 Context를 정의합니다. Context 클래스에서는 상태를 변경하는 setState 메소드와 해당 작업을 수행하는 이동 및 공격 메소드를 정의합니다.

Java 상태 디자인 패턴을 사용하여 객체 상태 전환을 구현하는 방법Summary

Advantages

상태 패턴을 사용하면 상태를 쉽게 추가할 수 있습니다. 새로운 상태 클래스입니다.

  • 상태 패턴은 상태 클래스에 상태 전환 논리를 캡슐화하여 객체의 상태를 만듭니다.

  • 상태 패턴을 사용하면 상태 전환이 더 간단해집니다.

  • 단점

상태 패턴은 시스템의 클래스 수를 증가시켜 코드의 복잡성을 증가시킵니다. 상태 전환 과정이 복잡해집니다.

  • 응용 시나리오

  • 객체의 동작이 상태에 따라 달라지고 런타임에 상태가 변경될 수 있는 경우 상태 패턴은 변경이 발생할 때 좋은 선택입니다.

상태 패턴은 개체가 해당 상태에 따라 다른 작업을 수행해야 할 때 유용합니다.

  • 새 동작을 개체에 동적으로 추가해야 하는 경우 상태 모드가 좋은 선택입니다. 일반적인 응용 프로그램 시나리오에는 주문 상태, 게임 상태 등이 포함됩니다.

위 내용은 Java 상태 디자인 패턴을 사용하여 객체 상태 전환을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿