Before/Afterパターン

2009年5月28日(木)
細川 努

関連するパターン

 前ページで説明したように、Before/Afterパターン自体のコーディングはとてもシンプルですが、適用するクラスやオブジェクトの数が多いと、同じような記述をたくさん行うことになり、後々のメンテナンスが大変です。

 保守性を高める一方で、将来の変化に柔軟に対応できるようにBefore/Afterパターンを適用するためには、以下のように、ほかのパターン(GoFパターン)と組み合わせることが有効です。

・Template Methodパターン
 Template Methodパターンは、スーパークラス(図2のAbstractクラス)にTemplate Method(処理の枠組みとなるメソッド)を定義しておいて、詳細の実装はサブクラス(図2のConcreteクラス)に記述するパターンです。

 このTemplate Methodの中にBefore/Afterパターンを記述し、サブクラス側でbefore()、method()、 after()を実装させることによって、Before/Afterパターンを簡単なフレームワークで実現することができます(図2の左側)。

 メソッドのスコープについては、Templateメソッドはpublicですがそれ以外はprotectedになっているので、クライアント側からはTemplateメソッドだけが見え、Before/Afterパターンに従ってサブクラスの実装が呼び出されるようになるのです。

Adaptorパターン

 新しいソフトウエアを作る場合において、Before/Afterパターンをたくさんのクラス・オブジェクトに適用するのであれば、Template Methodパターンを使って設計することが有効です。

 ただし、既存のアプリケーションの拡張や、ほかから提供されたAPIを利用する場合において、Before/Afterパターンを後から適用するような場合には、Adaptorパターンのほうが向いています。

 Adaptorパターンでは、既存の実装(図2のAdapteeクラス)に対して、新たにAdaptorクラスを追加します。このAdaptorクラスは、既存の実装を覆って隠してしまう、一種のラッパークラスです。

 Adaptorクラスには、before()、targetMethod()、after()の3つのメソッドがあり、targetMethod()の中にBefore/Afterパターンを記述します。これにより、クライアント側からはtargetMethod()だけが見えた状態で、既存の実装(Adaptee)に対してBefore/Afterパターンを適用することができるのです。

株式会社アーキテクタス
(株)アーキテクタス 代表取締役 技術士(情報工学)大手シンクタンクで金融系システム構築等を経験。現在、総務省CIO補佐官として、総務省内のシステム構築への助言等を担当している。要求開発アライアンス理事 日本Javaユーザー会(JJUG)監事

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています