はじめに
今回はデザインパターン23種類中の2つであるテンプレートメソッドパターンとファクトリーメソッドパターンについて学んできたのでそれをまとめたいと思います。
Template Methodパターン
一言でいえば「サブメソッドの書き換えで処理を変える」パターンです。
今回はなにかのデータをテストするプログラムについて考えてみます。
テストは
①データをつくる
②データを操作する
③検証する
の三つの流れで成り立っていますよね。
このように決まった手順で処理を行いたいとき活躍するのがテンプレートメソッドパターンです!
大きな抽象的なメソッドをつくり、その中で具体的なサブメソッドを呼び出すようにします。
具体的に書くと以下のようになります
UnitTestの中身は
public void UnitTest()
{
var data= CreateData();
Operate(ref data);
Validate(data);
}
というようにサブメソッドが順番に並べられることになります。
以下の図を見てください。親クラスのサブメソッドは抽象メソッドで構成されています。
親クラスUnitTestでUnitTest()の処理の枠組みを決め、親クラスのサブメソッドを子クラスでオーバライドし具体的な処理の内容を実装します。
このようにすることで、本来であればValueCheck、CollectionCheckにそれぞれ独自のメソッドを用意することになりコードの重複も多く生まれてしまう問題を解決することができるのです。
Factory Methodパターン
一言でいえば「インスタンスを作ってそれによって処理を変える」デザインパターンです。
今回は生徒をソートするプログラムについて考えてみましょう。生徒をソートする方法...名前、ID色々ありますよね。
比較するための(Icompareを実装した)インスタンスを新しく生成してそれを利用してそれぞれのソート方法で比較します。オブジェクトの生成をサブクラスに任せることで依存度を下げ、保守性が高まるのです。
なお、名前でソートしたくなったときはNameSortクラスとNameCompareクラスを増やせばよいです。
終わりに
今後もデザインパターンひとつづつ学習し、習得していきたいと思います!同じく学習中のエンジニアさんたち、お互い頑張っていきましょう!!