Open kurodakazumichi opened 6 years ago
関連するインスタンス群を生成するための API を集約することによって、複数のモジュール群の再利用を効率化することを目的とする。日本語では「抽象的な工場」と翻訳される事が多い。
Wikiはまともに何も書いてなかったので別なサイトを探す。
http://www.techscore.com/tech/DesignPattern/AbstractFactory.html/
ここでは鍋を題材にして説明されている。
様々な鍋を作る工場(Factory)の話ではなくて 鍋に入れる具材を作る工場のお話。 具材工場より鍋工場の方がしっくりくるんだけどなぁ
これを見る限りでもAbstract FactoryはProductを生産する工場になっているので 鍋工場ではなく、具材工場という表現が正しいのかなとは思う。
From | To |
---|---|
Client | main関数、要はクラスを使って処理する奴 |
AbstractFactory | 鍋工場 |
Product1 | スープ |
Product2 | メインディッシュ |
ConcreteFactory | 鶏肉鍋工場 |
ConcreteProduct1 | 鳥ガラスープ |
ConcreteProduct2 | 鶏肉 |
鍋工場は鍋に入れる具材を生産する機能を持っている。 スープとかメインディッシュを作る機能ね。
鶏肉鍋工場は鍋工場を継承しているので スープとメインディッシュを作る機能を持っているが
このクラスは具体的なものを生み出す。 スープは鳥ガラスープ メインディッシュは鶏肉
という感じで。
夫「今夜は鍋にしてー」 妻「何鍋にするの?」 夫「わかんないけどとりあえず鍋」 妻「はっきりしろや」
夫「とりあえず何があれば鍋になるの?」 妻「スープとメインの具と野菜」
この時点で何鍋になるかはわからないが 準備しないといけないものがわかるので
class abstract NaveFactory {
Soup getSoup();
Main getMain();
Vegetables getVegetables();
}
という抽象的な工場としてしまうというのが Abstract Factoryの基本だろう。
Abstract Factory Wiki