Dec13th

デザインパターン

Top / デザインパターン

パターン別まとめ

Abstract Factory

  • 特定のクラス名で固定されていると、生成コードを全て書き換える必要が出てくるので、一カ所にまとめる
    • 生成部は全てfactory.createProductA()になり、createProductA()内のnew ProductA()を書き換えるだけで修正可能に
  • 使い所
    • Productの生成を行う場所が複数個所、別々にある時
  • Template Methodだと共通のインタフェースをまとめるだけで、生成するコードの置き換えはできない
  • Abstract Factoryでは、ユーザにConcrete Factoryだけを見せることはできない
  • Product数を柔軟に変えることはできない
  • Abstract ProductとConcrete Productは1対1
    • Concrete FactoryでswitchすればProductNの中身は差し替えられるかもしれないが
  • Abstract FactoryとFactory Methodの差は生成するクラスの型が分かるか分からないかの違い?


Singleton

  • SingletonのGetInstance()に引数を持たせることの是非
    • インスタンス生成後、参照する際に引数が必要になる
      • デフォルト引数を使うのは初期化失敗のリスクがある(インスタンス生成したい時にデフォルト引数で呼び出してしまう)
      • インスタンス生成条件に、引数がデフォルト引数でない事を追加する?
    • GetInstance()前にInit(引数)するのは野暮
  • コンストラクタでの初期化失敗時に自己廃棄しようと自己参照meにNULLを入れても上手くいかない
    • コンストラクタ内でmeにNULLを入れたところで、newが半分壊れてるインスタンスのアドレスを指してしまうため、GetInstance()が返すのは(一応)有効なアドレスになってしまう


リンク