オブジェクト指向のこころ 第23章の練習問題の解答をまとめてみる。
基礎
ファクトリの責務とは何でしょうか?
オブジェクトの生成と,そのオブジェクトを使用可能であるように管理すること.
Factory Methodパターンを使用する本質的な理由とは何でしょうか?
オブジェクトの実体化に関する規則を,派生クラスの実装時まで保留したいという理由.
(p.332)
Factory Methodパターンは,主要なオブジェクト指向言語でも使用されています.Java,C#,C++ではどのような形で使用されているでしょうか?
- Java
- コレクションに対するiteratorメソッドがファクトリメソッドとなっている
- C#
- GetEnumeratorがファクトリメソッドとなっている.これは,様々なコレクションに対してイテレータを取得するために存在する
- C++
- begin()やend()等でファクトリメソッドが使用されている.
応用
このパターンが「Factory Method」と呼ばれているのは何故でしょうか?
生成を行うファクトリを制御するから.
Factory Methodパターンは,他のファクトリとどのように連携するのでしょうか?
他のファクトリに対して,その実体化を派生クラスまで遅延させることができる. その責務を派生クラスに委譲している.
GoFはFactory Methodの目的を「オブジェクト生成用のインターフェースを定義するものの,実体化するクラスの決定はサブクラスに任せる」と述べています.何故これが重要となるのでしょうか?
派生クラスをどう実体化するかの方法を知っておくことは常に望ましい,というわけではないから.