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

こんにちは、KOUKIです。

この記事では、デザインパターンの一つであるStrategyパターンについて紹介します。

デザインパターンまとめ

シチュエーション

Strategy は「戦略」を意味する英単語です。Strategy パターンは、処理の切り替えや追加が簡単に行えるようにするパターンになります。

例えば、ログ出力を例に考えてみましょう。

ログを出力する方法はたくさんあります。例えば、テキストファイルに出力する、CSVファイルに出力する、標準出力に出力する、などです。これは、Strategyパターンを当てはめることができそうなので、サンプルを実装してみましょう。

Strategyパターンの適用

Strategyパターンで切り替える処理は、ログの出力形式です。これを念頭に置いて、プログラミングしていきましょう。

Strategy(戦略)の定数化

Strategyを定数で定義します。

Terminal(標準出力)、Text(テキストファイル)、Csv(CSVファイル)の3つの戦略を定義しました。

Strategyインターフェース

Strategyが共通で持つメソッドを、インターフェースに定義します。

Strategyの実装

3つのStrategyを実装します。これらは、Strategyインターフェースを実装させるため、Write, Readメソッドを持ちます。

1. TerminalStrategy

標準出力のStrategyを作成します。

2. TextStrategy

テキストファイルのStrategyを作成します。

3. CsvStrategy

CSVファイルのStrategyを作成します。

LogProcessorの作成

Strategyを利用するLogProcessorを実装しましょう。

Strategyの切り替え

先ほど実装したLogProcessorで、Strategyの切り替えを行います。

以下のメソッドを実装しましょう。

これで、OutputFormat(定数)を渡すことで、Strategyを切り替えることが可能になりました。

LogProcessからStrategyを呼び出す

最後に、LogProcessorからStrategyを呼び出すメソッドを実装します。

使ってみよう

ここまで実装したソースコードを使ってみましょう。

最初に、NewLogProcessorコンストラクタで、標準出力へログを出力するインスタンスを作成しました。

その後、SetOutputFormatメソッドで、StrategyをText -> CSVへと切り替えています。

プログラムを実行します。

OKですね!

まとめ

Strategyパターンは、結構使えそうですね。

入力・出力形式が異なるファイル処理の実装、円やドルなど単位の異なる金額計算など、処理内容は同じでも、ものの要素が異なる処理を実装したいときに便利そうです。

それでは、また!

Go言語まとめ

ソースコード

コメントを残す