fv17の日記

Webエンジニアの備忘用ブログです。主にWeb界隈の技術に関して書いています。

オブジェクト指向のこころ - 11章 Abstract Factoryパターン

勉強用メモ
書籍のUML図ないと、これだけ見ても何もわからないな...

Abstract Factoryパターンとは

  • オブジェクトの生成と使用の責務を分ける
  • 状況に応じてオブジェクト群を使い分ける際に用いる

switchやif分岐は抽象化を示す赤信号の可能性

  • アルゴリズムや利用するオブジェクトの選択するための分岐は危険
  • 高い結合度と低い凝集度により、メンテナンスコストが上がり、カオスになりがち
  • 特に、ある変数が複数のswitchに使われ、switch同士が結合した時

下記で "MIDDLE" が増えた場合にどうする?

if RESOLUTION = "LOW"
  # 処理
elsif RESOLUTION = "HIGH"
  # 処理
end

安易な継承も赤信号。将来的に組合せ爆発が発生するから。

税計算の問題でも同様のことが記述されていた。ifやswitchによる処理の分岐や、継承による問題の解決には危険が潜んでいることが繰り返し述べられている。

どうすればいい?

  • Bridgeパターンで学んだように、共通性/可変性分析でオブジェクト群に分ける
  • それらのオブジェクト群を使用する側、使用される側に分けて設計する

ここで新たな問題、「適切なオブジェクトをどうやって生成するのか?」が生まれる。
必要なオブジェを実体化するFactoryオブジェクトを用意する。