Factory Method

通知チャネルを生成する

生成の知識を閉じ込める

このデモで分かること: 通知の「作り方」を一箇所に閉じ込める

このデモで Factory Method を使う理由

  • 使う側が欲しいのは「通知する」ことであり、Email/Slack/Push の new の詳細ではない。
  • 呼び出し側に具象クラス名が散らばると、チャネル追加のたびに修正箇所が増える。
  • Factory に生成を閉じ込めれば、使う側は種別を渡すだけでよく、差し替えも一箇所で済む。

パターンなし vs このパターン(イメージ)

記事の本編ではなく、このデモ題材を if の山にした場合との対比です(疑似コード)。

パターンなし

// パターンなし(イメージ)
if ("slack".equals(ch)) {
  return new SlackNotifier();
}
// 使う画面・サービスごとに同じ if がコピーされる

Factory Method あり

// Factory
Notifier n = NotifierFactory.create(ch);
n.send(message);
// → 生成の知識は Factory だけ

デモ

結果

[Email] 送信: パターン学習を始めましょう

このデモで生成された実装クラス

EmailNotifier

NotifierFactory.create(...) がチャネルに応じた具象クラスを返します。

操作 → 動いたクラス / メソッド

  1. 操作: チャネル「email」で通知を生成して送信
  2. → NotifierFactory.create("email")
  3. → new EmailNotifier() … Factory が選んだ具象クラス
  4. → EmailNotifier.send(message)
このパターンの解説記事 ↗

記事は考え方・別サンプルの解説です。このページのデモ実装とはソースが異なります (クラス名・題材はデモ用に簡略化しています)。