読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

8.AbstractFactory 関連する部品を組み合わせて製品を作る

抽象的な工場では、抽象的な部品を組み合わせて抽象的な製品を作る。
実装には注目せず、APIに注目する。APIだけを使って部品を組み立てて製品にまとめる。
製品を得るために必要な手順と情報を実装から切り離す。

f:id:p-monster:20121218195140p:plain

AbstractProduct・・・抽象的な部品や製品のAPI
AbstractFactory・・・AbstractProductのインスタンスを作り出すためのAPI
Client・・・AbstractFactoryとAbstractProductのAPIだけを使って仕事を行う。具体的な実装については知らない
ConcreteProduct・・・AbstractProductの実装
ConcreteFactory・・・AbstractFactoryの実装

抽象的な工場は抽象的な部品を生み出す。抽象的な部品を組み合わせて製品を形作る。
実装を切り替えることで全く別の装飾がされた製品を得ることができる。

具体的な工場を作るのは簡単。何を実装するべきか明白だから。
部品を追加するのは困難(すでに存在する具体的な工場をすべて修正する必要がある)

関連しているパターン

Builder・・・AbstractFactoryパターンはAPIが定まってる抽象的な部品を組み合わせて複雑な構造を持ったインスタンスを作る。Builderは段階を追って大きなインスタンスを作る
FactoryMethod・・・製品や部品を作る所はFactoryMethodパターンになることもある
Composite・・・作られる製品はCompositeになることがある
Singleton・・・具体的な工場はSingletonになることがある

オブジェクト指向言語を使う上でのお約束

switchやifを使用してクラスの型を判別して処理を振り分けるようなことはしない

参考:

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門