MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

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


Template Methodパターン

Template Methodパターンは、

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

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

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

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

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

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

デザインパターンです。


以上のように、

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

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

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

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

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

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


このTemplate Methodパターンで

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

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

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


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

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

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


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

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

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

言い換えると、

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

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

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

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

cpp/TemplateMethod.cpp at master · AtsushiSakai/cpp

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com