テンプレートメソッドとは
テンプレートメソッドとは、以下の2つのクラスによって構成するデザインパターン。
- 共通の処理を行う「抽象的なベースのクラス」
- 個別の処理を行う「具象的なサブクラス」
どういう時に使うのか
処理の流れがほとんど同じコードが複数存在し、それらを共通化したい場合に使う。 例えば、apiを使ってブランチをマージする処理をgithub用とgitlab用で作る必要がある場合、2つの処理は以下の共通の流れを辿る。
- checkoutする
- pullする
- マージする対象のブランチを探す
- ブランチをマージする
- pushする
上記のような共通処理は、ベースクラスにまとめ、githubとgitlabの違いはサブクラスにまとめて書くのがテンプレートメソッドのデザインパターン。
使うメリット
- 処理の骨子と個別の処理を分けることによって変更すべき箇所がすぐにわかる。
- コードがすっきりする
具体例:githubとgitlabのapiを使ってブランチをマージするコード
やりたいこと:各gitのホスティングサイトにて、ブランチをマージするjobを作りたい。 前提: - githubとgitlabで実現したい処理の流れは同じ。 - githubとgitlabのapiの仕様が異なるため、「マージ対象のブランチを探すコマンド」だけは別々の処理を書く必要がある。 サンプルコード:
class Merge def execute checkout pull target_branch merge push end def checkout git checkout end def pull git pull end def target_branch raise 'Called abstract method: target_branch' end def merge git merge end def push git push end end class GitHubMerge < Merge def target_branch github_api専用の処理 end end class GitLabMerge < Merge def target_branch gitlab_api専用の処理 end end # 実行 GitHubMerge.new.execute GitLabMerge.new.execute