[Go言語]Stateパターンを学ぼう2!

こんにちは、KOUKIです。

この記事では、前回に引き続き、デザインパターンの一つであるStateパターンについて紹介します。

前回

デザインパターンまとめ

シチュエーション

復習ですが、State パターンは、 モノではなく「状態」をクラスとして表現するパターンです。
※Go言語ではクラスは存在しないので、構造体やインターフェースがそれらを表現します。

Handmade State Machine

WebSocketの接続状態を例に、Stateパターンを学習していきましょう。

WebSocketの接続状態

今回は、Stateの状態を定数として実装します

トリガー

Stateの状態を変更するトリガーも定数として実装します。

ルール

状態とトリガーを組み合わせて、ルールを作りましょう。

例えば、Open(接続完了)状態の場合は、OffHook(接続切断状態への移行)、Message(メッセージを送る)、ReadyState(現在の状態の確認)の3つのトリガーを持たせました。その他の状態も同様です。

使ってみよう

ここまで実装したプログラムを使ってみましょう。

標準入力から入力する値によって、WebSocketの接続状態を変更できるプログラムを実装しました。

実行してみましょう。

OKですね。入力するトリガーによって、WebSocketの状態が変化していくことがわかると思います。
※Stateの状態をReadyStateで確認できるようにしてありますが、「// fmt.Println(“WebSockets Connection State is”, state)」のコメントを外せば、入力時に状態が把握できるようにしてます。

まとめ

今回のプログラムは、実践向きではないかもしれませんが、結構面白い実装方法ですよね。

Stateを定数で定義し、入力パラメータをトリガーにその状態を変えていく…こんな実装の方法もあるのだと勉強になりました^^

少し混乱するかもしれませんが、ページの最後の方に、全てのソースコードを記載しているので、一つずつ手で入力していくと、わかりやすいかもしれません。

次回

次回は、Stateパターンで数当てゲームを作ってみましょう。

Go言語まとめ

ソースコード

コメントを残す