PR

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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