Facadeパターン
複数classを利用する際に、その組み合わせ順などを定義した窓口となるclassを用意する
Facase Classは薄い
複数classの処理を明記すること、が責務であって複雑な実装などは持たない
利用者はFacase Classの内部やっていることを直接呼び出すこともできる
これを禁止すること(つまりFacase Classの利用を強制すること)はFacase Classの責務ではない
みたいなルール(?)があるらしい、原典にはあたってないので知らんけど

DocumentBuilder
というfacase classを用意しておくことで、
Documentを書く際に、「複数のclassをこの順序で組み合わせること」を特に考慮せず、 write()
の引数の赴くままにコードを書けばやりたいことが完了する
tsclass DocumentBuilder {
static write = (userId: string, title: string, body: string[]) => {
const user: User = UserDB.fetchUser(userId);
// 複数のclassを使って個別に処理をしている
HeaderBuilder.write(title, user.name);
BodyBuilder.write(body);
FooterBuilder.write();
}
}
// この1methodだけ知っていればいい
DocumentBuilder.write(
'100',
'今さら聞けないファサードパターン',
[
'ファサードパターンとは・・・',
'例として挙げられるのは・・・',
'続いて実際のコードを見ていきましょう・・・'
]
);
コード例がシンプルでさっとわかって良い