Template Method は、 振る舞いに関するデザインパターンの一つで、 アルゴリズムの骨組みを基底クラスで定義し、 サブクラスではアルゴリズムの全体的な構造は残したまま、 ステップを上書きします。
概念的な例
One Time Password (OTP) 機能を考えてみましょう。 使い切りパスワードをユーザーに配布するには、 SMS、 電子メールなどいくつかの方法があります。 しかし、 SMS であろうと電子メールであろうと、 OTP の全体的プロセスは一緒です:
- n 桁の乱数を発生。
- 後の検証のため、 この番号をキャッシュに保存。
- 通知内容を用意。
- 通知を送信。
将来導入されるかも知れない新型 OTP もおそらくこれらのステップを踏むものと思われます。
というわけで、 我々は、 ある特定の作業のステップの大枠は同じだが、 ステップの実装は異なる、 という状況にあります。 これは、 Template Method パターンを適用するのに適した状況です。
最初に、 決まった数のメソッドからなる、 基底の雛形のアルゴリズムを定義します。 これが、 我々のテンプレート・メソッドです。 次にステップのメソッドを実装しますが、 テンプレート・メソッドはそのままにします。
otp.go: テンプレート・メソッド
sms.go: 具象実装
email.go: 具象実装
main.go: クライアント・コード
output.txt: 実行結果