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

こんにちは、KOUKIです。

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

デザインパターンまとめ

シチュエーション

Template Method パターンは、テンプレートの機能を持つパターンです。

テンプレートとは、鋳型、雛型、定型書式などの意味を持つ英単語で、何らかの物やデータを作成する際の雛形になります。

例えば、10回勝負のジャンケンをするとします。その際の手順は、以下のようになるでしょう。

  1. ゲームをスタート
  2. じゃんけんをする
  3. 勝敗がわかる
  4. 2~3を10回繰り返す
  5. 勝者がわかる

この1~5の流れをテンプレート化します。これにより、例えば、チェスだったり、カードゲームだったり、上記のパターンに当てはまるゲームの場合、プログラムを一から作り直すことをせず、テンプレートを利用することでこの流れに沿ったゲームを作成することが可能になります。

Template Methodパターンの適用

早速、Template Methodパターンで、プログラミングしていきましょう。

テンプレートインターフェース

最初に、テンプレート(Game)インターフェースを作成します。

テンプレートを利用するプログラムは、すべてStart, HaveWinner, TakeTurn, WInningPlayerメソッドを実装する必要があります。

Template Methodの作成

次に、Template Methodを作成します。

Gameインターフェースを実装したインスタンスは、playGameを利用することができます。playGameの流れそのものがテンプレートです。

ゲーム1: じゃんけん

じゃんけんをプログラミングします。

ゲーム2: チェス

チェスをプログラミングします。

使ってみよう!

じゃんけんもチェスもGameインターフェースを満たすStart, HaveWinner, TakeTurn, WInningPlayerメソッドを実装しているので、PlayGame関数を利用できます。

プログラムを実行しましょう。

OKですね。

Functional Template Mthod

PlayGame関数を以下のように実装することができます。

PlayGameの中に、テンプレートとなる関数を渡しました

この関数は、次のように利用します。

プログラムを実行してみましょう。

OKですね。

まとめ

Template Methodパターンは、実務に活かせそうな考え方ですね。

共通する流れで処理したい場合に用いると良いと思います。個別に処理をしたい場合は、テンプレート関数から得た結果を加工すれば良さそうなので、使い勝手もいいですね。

利用するとしたらコマンドラインツールとかになると思います。ログの処理などに利用できそうです。

それでは、また!

Go言語まとめ

ソースコード

Template Method

Functional Template Method

コメントを残す