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

実施日時:2019/7/31
対象範囲:第8章~第9章
参加者:yodai、yoridori、くめごん、まぶり、kassyi

8章 Abstract Factory
抽象的な部品を組み合わせて抽象的な製品を作る
具体的な実装ではなくインターフェース(API)に注目し、それだけを使って部品を組み立てて(抽象的な)製品を作成する
ファクトリーパターンは一つの部品だけを作るが、アブストラクトファクトリーパターンは複数の部品を作成する

サンプルプログラム
ItemクラスはLinkクラスとTrayクラスを同一視するためのもの
LinkやTrayはItemクラスを継承する
Tray(トレイ)とはお盆のことであり、Itemを一つ一つ載せるイメージ
PageクラスのoutputメソッドはTemplate Methodパターンになっている
Factoryクラスは抽象的な部品を組み合わせて抽象的な処理を作成する工場
複数のLinkやTrayをひとまとめにして一つのインスタンスを生成する。
ListFactoryクラスで具体的な処理を実装する
ListTrayクラスでitemの中身をチェックすることはしてはいけない
ifやswitchで判別することはダメ
ItemクラスでmakeHTMLメソッドが定義されており、異なるクラスで異なる実装がされているのでそれを呼び出す

改修について
具体的な工場を新たに追加するのは簡単だが、抽象化された部品を新たに追加するのは困難

9章 Bridge
機能と実装を橋渡しをするもの
機能のクラス階層は継承がドンドン深くなる
実装のクラス階層は、一つの抽象クラスにサブクラスが増えて行く

サンプルプログラム
CountDisplayクラスは縦に機能が増えていくイメージ
StringDisplayImplは横にクラスが増えてくイメージ

移譲と継承の違いを良く考える
移譲は緩いつながり、継承は固いつながり
Displayクラスのメソッドでは、implクラスが仕事している
implクラスにおいて、StringDisplayImplクラスを呼び出して、それが実際に動いている


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