@nqounetです。
前回は、実行時にハンドラーを動的に切り替える機能を追加しました。
今回は、複数のハンドラーを登録して管理する仕組みを作ります。
問題:ハンドラーが増えると管理が大変
これまでのディスパッチャーでは、ハンドラーを1つずつset_handlerで切り替えていました。しかし、ハンドラーが増えてくると、どこかでハンドラーの一覧を管理したくなります。
例えば「listという名前でListHandlerを、formという名前でFormHandlerを登録しておき、名前を指定するだけで切り替えたい」というニーズが出てきます。
解決策:レジストリでハンドラーを管理する
「レジストリ」とは、オブジェクトを名前付きで登録しておく仕組みです。ハッシュを使って、名前とハンドラーの対応を管理します。
| |
handlers属性はハッシュリファレンスを持ち、register_handlerメソッドで名前とハンドラーの対応を登録します。
使ってみよう
| |
これで、名前を指定するだけで適切なハンドラーに処理を振り分けられるようになりました。
flowchart LR
D[Dispatcher]
H["handlers = { }"]
L[ListHandler]
F[FormHandler]
T[ThreadHandler]
D --> H
H -->|"'list'"| L
H -->|"'form'"| F
H -->|"'thread'"| T
まとめ
- 複数のハンドラーを管理するにはレジストリパターンが便利である
- ハッシュを属性として持ち、名前とハンドラーの対応を管理する
register_handlerメソッドでハンドラーを登録するdispatchメソッドで名前を指定してハンドラーを呼び出す
次回予告
次回は、名前からハンドラーを自動で選ぶ仕組みを作ります。ファクトリー的な生成パターンを学びましょう。お楽しみに。
