イメージ図で覚えるデザインパターンまとめ 01. Iterator 〜 03. TemplateMethod
今まで、デザインパターンにはちょくちょく触れてきましたが、あまり理解できていませんでした。
ふわっとしたイメージだけあって、実際のコードに落としこめていませんでした。
そこで、「実務で使えるように理解しよう!」と思い、勉強し始めました。
そうしてできたものが、以下の記事です。
デザインパターンから学ぶオブジェクト指向 【01. Iterator】 - 圧倒亭グランパのブログ
デザインパターンから学ぶオブジェクト指向 【02. Adapter】 - 圧倒亭グランパのブログ
ですが、このスライドではまだ情報量が多く頭に定着していません。
なので、
「より情報量を少なくし、パッと頭で思い浮かべられて、仕事で使えるようにしよう」
というコンセプトでもう一度まとめてみました。
記憶力がないので、できるだけ最小限の情報にとどめています。
また、自分はイメージ記憶のほうが好きなので、オレオレイメージ図でまとめています。
基本構成は以下です。
1.このパターンは何をするものか 2.イメージ図 3.実務で使える学び 4.コード
「イメージ図」と「実務で使える学び」だけ覚えておけばいいかなーと思います。
イメージ図は一般的なクラス図を無視しているので、正しいクラス図は他のサイトを参考にしてください。
また、「実装できること」が目的なので、図はちょっと複雑かもしれません。
「図を思い出したらすぐにコードも思い出せる」を目指しています。
今回は 01.Iterator 〜 03.TemplateMethod です。
※ ナンバリングはこちらのサイトを参考にさせていただきました
01. Iterator
何をするものか
データの集まりに対して、様々なアクセス方法を実現する。
イメージ図
① Aggregater(集約体)、Iterator、MainClassに分離する ② Iteratorは Iterator interface を実装する ・これにより、MainClassを書き換えずにIteratorの切替が可能
実務で使える学び
- データの集まりとデータ処理を分離させる
- メインの処理を変更せずに、データの集まりやデータ処理を切替・修正できる
- テストも書きやすい
コード
順方向と逆方向に走査するパターンを例として挙げています。
https://github.com/at-grandpa/design_pattern/tree/master/01.Iterator
https://github.com/at-grandpa/design_pattern/tree/master/01.Iterator
02. Adapter
何をするものか
インターフェース(この場合メソッド名や呼び出し元)の異なるクラスを接続する。
イメージ図
① 変更不可なClassBを、ClassAの代わりに使いたい ② ClassAと同じInterfaceを持つAdapterを作成する ③ MainClassを変更せずに、ClassBのoriginal_method()を呼ぶことができる
実務で使える学び
- 既存コードを変更せずに、機能を使いまわすことができる
- ちょっとした変換処理もAdapterに持たせると、より柔軟に対応できるかも
コード
各国の挨拶を例に、Adapterパターンを実装しています(こういう例は難しいですが...)。
https://github.com/at-grandpa/design_pattern/tree/master/02.Adapter
https://github.com/at-grandpa/design_pattern/tree/master/02.Adapter
03. TemplateMethod
何をするものか
大枠の処理をスーパークラスにて共通化(TemplateMethodに記述)し、具体的な処理をサブクラスに任せる。
イメージ図
① 大枠の処理をSuperClassのTemplateMethodに記述する ② 大枠の処理の中のMethodを抽象メソッドにする ③ 抽象メソッドの具体的な処理は各SubClassに任せる
実務で使える学び
- 大枠の処理を変更せずに、微妙に異なるクラスを簡単に作成できる
- 処理内容は既に書かれているので、異なる部分だけ記述すればOK
- 大枠の処理の修正が簡単
- SuperClassのTemplateMethodを書き換えるだけで、全てのSubClassの処理を修正できる
- もし各SubClassそれぞれに似たような処理が書かれていた場合、全て修正しなければならなく、つらい。。。
コード
File入力と標準入力を例に、TemplateMethodパターンを実装しています。
https://github.com/at-grandpa/design_pattern/tree/master/03.TemplateMethod
https://github.com/at-grandpa/design_pattern/tree/master/03.TemplateMethod
今回はここまで
今回は01. iterator 〜 03. template まででした。
次回は04.FactoryMethodから。
逆にわかりにくい!などのご意見があれば、コメントやブクマコメント、Twitterにてご連絡ください。