MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

C++によるデザインパターン3: Template Methodパターン

増補改訂版 Java言語で学ぶデザインパターン入門

増補改訂版 Java言語で学ぶデザインパターン入門

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン

  • 作者: エリックガンマ,ラルフジョンソン,リチャードヘルム,ジョンブリシディース,Erich Gamma,Ralph Johnson,Richard Helm,John Vlissides,本位田真一,吉田和樹
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 1999/10
  • メディア: 単行本
  • 購入: 21人 クリック: 711回
  • この商品を含むブログ (212件) を見る


Template Methodパターン

Template Methodパターンは、

ある大まかな処理は一緒ですが、

それぞれの場合において、細かい部分だけが変化するような

ソフトウェアを作成したい時に、

大まかな処理をあるクラス(スーパークラス)に記述し、

そのクラスを継承するクラス(サブクラス)に、

それぞれの変化する部分の処理を記述する

デザインパターンです。


以上のように、

共通の部分をスーパークラスにまとめて、

残りの部分を各サブクラスで記述することにより、

共通部分の処理を、何度も記述しなくても良くなり、

共通部分の処理を変更させたい場合も、

そのスーパークラスだけを変更することで、

すべてのサブクラスにも適応することができます。


このTemplate Methodパターンで

クラス設計をする上で重要なのが、

リスコフの置換原則というのを守ることです。

その7 参照オブジェクトの正体は気にしない原則 : LSP


詳細は上記の資料を参照していただきたいのですが、

一言で言うと、スーパークラスが作ったルールを、

サブクラスで壊しては行けないということです。


同じスーパークラスを継承したサブクラスであるにもかからわず、

同じ名前の関数で返り値や処理などが違うことは

してはいけないということです。

言い換えると、

ユーザ側がどのサブクラスを使っても、

同じように処理できるようにする必要があるということでもあります。

C++によるサンプルコード

下記のGitHubページにて公開しています。

cpp/TemplateMethod.cpp at master · AtsushiSakai/cpp