【読書会メモ】Java言語で学ぶデザインパターン入門(3)

実施日時:2019/7/23
対象範囲:第5章~第7章
参加者:mizzsugar(みずき)、yodai、yoridori、くめごん、まぶり、kassyi

5章 Singleton
インスタンスが絶対に1個しか存在しない事を保証したい場合に使用する。
コンストラクタをprivateにして、外部からコンストラクタを呼び出さない様にする。
スレッドが複数有り、getInstance()が複数のスレッドから同時に呼ばれた場合、
別のインスタンスになる事は有り得るので、スレッドセーフとは言えない。

6章 Prototype
インスタンスをコピーして新たなインスタンスを作成する。
インスタンス生成が複雑で、既存のインスタンスをコピーして作成した方が良い場合に使用する。
ソースの中にクラス名が書かれていると、そのクラスと切り離して再利用できなくなる。
コピー対象となるクラスはCloneableインターフェースを実装する必要がある。
標準だとコピー時に参照渡しをするので、インスタンスを複数作った場合、片方のオブジェクトを変更するともう片方のオブジェクトも変更される。
フィールドにリストなどのオブジェクト型の変数を持っている場合に注意が必要、別のメソッドを用意してコピー処理を行う必要が有る。

7章 Builder
フローと実装を分ける。
DirectorでTextBuilderかHTMLBuilderを渡しているがそれらを意識しないで良い。
実際に作っているのがDirectorであり、BuilderのAPIを知っているだけ
Builderがサブクラスを細かく知らないので、サブクラスでメソッドの中身の変更が有っても問題無いが、サブクラスで使用されているメソッドをDirectorで使用する必要が有る。
Directorがとりまとめ及びメソッドの呼び出しを行っている。
具体的なメソッドの処理はConcreateBuilderが行っている
DirectorがBuilderクラスのサブクラスを知らないからこそ、サブクラスの入れ替えが出来る。
この交換可能性を常に意識する
Templateメソッドパターンがスーパークラスでフローを作成して、サブクラスで具体的なメソッドの処理を作成するので、Builderパターンと似ている

この記事が気に入ったらサポートをしてみませんか?