Heim Java javaLernprogramm So implementieren Sie eine Java-Zustandsmaschine

So implementieren Sie eine Java-Zustandsmaschine

May 14, 2023 am 11:40 AM
java

Angenommen, wir haben zwei Zustände.

So implementieren Sie eine Java-Zustandsmaschine

Dieser Zustandsübergang ist sehr einfach. Versuchen wir, ihn in Java zu implementieren Wie Sie sehen, gibt es vier Größen, die den Zustand darstellen, nämlich:

currentState: stellt den aktuellen Zustand dar So implementieren Sie eine Java-Zustandsmaschine

action: stellt die entsprechende Aktion dar

  • nextState: stellt den nächsten Zustand dar

  • event: stellt das entsprechende Ereignis dar

  • Die Bedeutung dieses Vier-Tupels besteht darin, dass im Status currentState eine Aktion in den Status nextState übertragen wird und die Ereignisantwort ausgelöst wird.

    Achten Sie auf die vier Methoden der Ketteninitialisierung. Die Definition dieser vier Methoden macht die Statusinitialisierung sehr elegant.
  • Werfen wir einen Blick auf Ereignisse, die diese Schnittstelle implementieren, um bestimmte Vorgänge auszuführen.

    public class StateTransaction {
     
        // 当前状态
        private StateEnum currentState;
        // 相对应动作
        private ActionEnum action;
        // 下一个状态
        private StateEnum nextState;
        // 相应事件
        private Event event;
     
        public StateTransaction() {
     
        }
     
        public StateEnum getCurrentState() {
            return currentState;
        }
     
        public ActionEnum getAction() {
            return action;
        }
     
        public StateEnum getNextState() {
            return nextState;
        }
     
        public Event getEvent() {
            return event;
        }
     
        // 链式初始化对象
        public StateTransaction source(StateEnum state) {
            currentState = state;
            return this;
        }
        public StateTransaction when(ActionEnum action) {
            this.action = action;
            return this;
        }
        public StateTransaction target(StateEnum state) {
            nextState = state;
            return this;
        }
        public StateTransaction how(Event event) {
            this.event = event;
            return this;
        }
     
    }
    Nach dem Login kopieren
    public interface Event {
     
        public String handle();
     
    }
    Nach dem Login kopieren
    public class PlayBasketballEvent implements Event{
        @Override
        public String handle() {
            System.out.println("开始打篮球");
            return "开始打篮球";
        }
    }
    Nach dem Login kopieren

    Darüber hinaus müssen wir zwei Aufzählungsklassen definieren um den Status bzw. die Aktion darzustellen
  • public class SingDanceRapEvent implements Event{
        @Override
        public String handle() {
            System.out.println("开始唱,跳,rap");
            return "开始唱,跳,rap";
        }
    }
    Nach dem Login kopieren
Nachdem die oben genannten Vorbereitungen abgeschlossen sind, benötigen wir eine Zustandsmaschinenklasse, um die Zustandsübertragung durchzuführen

public enum StateEnum {
    // 打篮球
    PLAY_BASKETBALL,
    // 唱跳rap
    SING_DANCE_RAP
}
public enum ActionEnum {
    // 音乐起
    MUSIC_ON,
    // 音乐结束
    MUSIC_OFF
}
Nach dem Login kopieren

Der obige Code enthält zwei Schlüsselmethoden, nämlich addone( ) undexecute()

Lassen Sie uns Sprechen Sie zuerst über addone(). Die Methode initialisiert zunächst ein StateTransaction-Objekt, fügt es dann in die Liste ein und gibt schließlich das Objekt zurück. Sobald wir dieses Objekt erhalten, können wir den Inhalt ausfüllen.

Lassen Sie uns noch einmal über „execute()“ sprechen. Diese Methode empfängt ActionEnum als Parameter und durchläuft dann die Liste, um eine Statusinformation des nächsten Objekts zu finden, das durch Ändern des aktuellen Status durch die entsprechende Aktion erhalten wird handle() in der Event-Methode und übertrage den aktuellen Status und gebe schließlich StateTransaction zurück, oder null, wenn nicht gefunden.

Werfen wir zum Schluss einen Blick auf die Initialisierungsmethode

public class StateMachine {
 
    // 存储状态信息
    private List<StateTransaction> stateTransactionList;
    // 记录当前状态
    private StateEnum currentState;
 
    public StateMachine(StateEnum state) {
        currentState = state;
        stateTransactionList = new ArrayList<>();
    }
 
    // 添加一条状态信息
    public StateTransaction addone() {
        StateTransaction stateTransaction = new StateTransaction();
        stateTransactionList.add(stateTransaction);
        return stateTransaction;
    }
 
    // 进行状态转移
    public StateTransaction execute(ActionEnum action) {
        for(int i=0; i<stateTransactionList.size(); i++) {
            if(currentState==stateTransactionList.get(i).getCurrentState() &&
                action==stateTransactionList.get(i).getAction()) {
                stateTransactionList.get(i).getEvent().handle();
                currentState = stateTransactionList.get(i).getNextState();
                return stateTransactionList.get(i);
            }
        }
        return null;
    }
 
}
Nach dem Login kopieren

Sie können sehen, dass wir mithilfe der Kettenmethode direkt eine Statusübertragungsnachricht erstellen können, was sehr elegant ist

Die Programmausgabe lautet wie folgt

Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine Java-Zustandsmaschine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.

See all articles