おとやすみ日記

ゲームプランナー、一児の父です。

AS3でデザインパターンその3「TempleteMethod」

このパターンを実装するとき、具体的には抽象クラス(スーパークラス)・具体的なクラス(サブクラス)の間で連携することになる。

抽象クラス内には、実行したいふるまいの抽象メソッドと、それを含むテンプレートメソッドを定義する。

具体的なクラスはこの抽象クラスを継承しているが、いかんせん抽象クラスなので、先に決めた抽象メソッドをそのまま実行することはできない。なので、サブクラス内でオーバーライドして処理を書いてやる。

そうすることで、サブクラス内からスーパークラス内のテンプレートメソッドを実行した場合、オーバーライドされたメソッドを含んだ処理が実行されることになる。

複数のクラス内で共通する処理(たとえば画像を表示させる)があった場合、その処理は抽象クラス内のテンプレートメソッドとして定義する。

で、あとの異なる処理はそれぞれのクラス内でオーバーライドした抽象メソッドの処理として、ある点を除いて似たような処理をする複数のクラスがあった場合は共通部分をまとめてしまうことができる。

その結果似たようなクラス内でのコピペが防止できるし、バグが合った場合もテンプレートメソッド内の処理を変更すればいいので、管理しやすくなる。

感覚的には二次方程式に似てる気がする。

( a + b ) * c = d という式がテンプレートメソッドとすると、

a,b,c,dという各変数は、継承したサブクラスによって中身はそれぞれ異なる。

でもテンプレートメソッドは共通なので、似たような処理をする複数のクラスが出てきた場合は使えるパターンだと思う。