Dec13th

デザインパターン の変更点

Top / デザインパターン


*パターン別まとめ [#se791222]
**Abstract Factory [#a4034398]
-特定のクラス名で固定されていると、生成コードを全て書き換える必要が出てくるので、一カ所にまとめる
--生成部は全て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の差は生成するクラスの型が分かるか分からないかの違い?

-ファクトリパターンで作るクラスのクラス名自体はハードコーディングせざる得ない?
--typeidで何とかなるかもしれない
--Abstract Factoryがそれっぽいことやってそうな感
---http://www.geocities.jp/showa_yojyo/note/alexandrescu01-note3.html#id5
---Modern C++ Designに書いてある模様

~

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

~

*リンク [#gd9fcb37]
-[C++] Singletonでコンストラクタに引数を使う場合 ※質問
http://q.hatena.ne.jp/1360765786

-Dia
https://wiki.gnome.org/Apps/Dia/
不安定なことが多い

-astah* community
http://astah.change-vision.com/ja/product/astah-community.html
無償版の機能制限が多い

-UMLエディタ JUDE
http://jude.change-vision.com/jude-web/product/community.html
ちょっと古い