デザインパターン学習メモ:「Factory Method」
このパターンの目的
オブジェクトを生成するときのインタフェースだけを規定して、実際にどのクラスをインスタンス化するかはサブクラスが決めるようにする。Factory Methodパターンは、インスタンス化をサブクラスに任せる。(GoF本、P.115)
実装例
// Creator
public abstract class AbstractShapeFactory {
abstract Shape createCircle();
}
// ConcreteCreator
public class ShapeFactory extends AbstractShapeFactory {
@Override
Shape createCircle() {
return new Circle();
}
}
// Product
public interface Shape {
}
// ConcreteProduct
public class Circle implements Shape {
public Circle() {}
}
利点
Circle
クラスの生成をnewすることなくFactoryを通じて行うことができるようになったので、具体的なクラスへの依存を取り除くことができた。
こうして生成されたCircle
クラスは、Shape
インタフェースを通して操作されるため、Circle
クラスに固有のメソッドを呼ばれることはなくなった。
(備考)生成に関するパターンの使い分け
GoF本では、「Abstract Factory」、「Builder」、「Factory Method」、「Prototype」、「Singleton」の5つが生成に関するパターンとして紹介されている。
どのパターンを用いるかは自分が解決したい課題に応じて変わってくるのはいうまでもないが、「Factory Method」がシンプルで導入しやすいため、まずこれを使ってみるとよい。
GoF本には以下のように書かれている。
Factory Methodパターンは、しばしば、オブジェクトを生成する標準的な方法として扱われる。(中略)設計の初期段階ではFactory Methodパターンをまず使っておき、より一層の柔軟性が必要であることがわかったときに、他のパターンに発展させるようにする。(P.146)
参考文献
- エリック ガンマ、ラルフ ジョンソン、リチャード ヘルム、ジョン プリシディース(1999)『オブジェクト指向における再利用のためのデザインパターン 改訂版』本位田 真一、吉田 和樹 監訳、SBクリエイティブ
- ロバート・C・マーチン(2004)『アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技』瀬谷啓介訳、SBクリエイティブ
Author And Source
この問題について(デザインパターン学習メモ:「Factory Method」), 我々は、より多くの情報をここで見つけました https://qiita.com/aki3061/items/d568a19cc2b39352917d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .