Help us understand the problem. What is going on with this article?

デザインパターン×PHP - Template Method

More than 5 years have passed since last update.

はじめに

増補改訂版Java言語で学ぶデザインパターン入門を利用して、デザインパターンを学習していこうと思います。
その備忘録として、徒然にQiitaに投稿していきます。

Template Methodパターンの構成要素

役名 概要
 AbstractClass 処理の大きな枠組みを定義するクラス。
その枠組みを定義するメソッド(=テンプレートメソッド)と、
枠組みで使用する抽象メソッドを宣言する。
 ConcreteClass AbstractClassを継承したサブクラス。
AbstractClassで定義されている抽象メソッドを具体的に実装する。
このメソッドはAbstractClassのテンプレートメソッドから呼び出される。

Template Methodパターンのクラス図

Template Methodパターンのクラス図

Template Methodパターンのメリット

  • ロジックの共通化
    ー サブクラス側に共通処理部分を記述する必要がなくなり、変更が発生した場合もAbstractClassを修正するだけでOK。

  • 処理の大きな枠組みを保証できる
    ー サブクラスではAbstractClassで定義された抽象メソッドを具体的に実装する必要がある。このため、処理の大きな枠組みと抽象メソッドとして定義したメソッドの実装が保証される。

Template Methodパターンの使い方

  • 【具体例】webアプリのaction
    ー validateがNGならエラーを返す、validateがOKならview用のHTMLを返す(doMain)という流れが基本にある。この基本の流れをテンプレートメソッドにして、vaildate, doMainを子クラスで実装する。

※ 詳しくはこちらの記事をご参照ください。PHPで使うGoFパターン ひとり Advent Calendar - テンプレートメソッド - Qiita
+ 抽象メソッドのようにサブクラスで実装することが期待されるメソッドの名前は、慣習上「do~」にすることが多い。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away