AdapterパターンとBridgeパターン

2009年5月19日(火)
清水 英雄

デザインパターンは、先人たちの知恵のエッセンス

前回のデザインパターンでは、生成に関するパターンとしてFactoryMethodパターンを取り上げました。

第2回に取り上げるのは、構造に関するパターンのうちの2つ、AdapterパターンとBridgeパターンです。前回と同じようにUMLとサンプルコードを元に解説していきたいと思います。

ここで、AdapterパターンとBridgeパターンの説明に入る前に、もう一度デザインパターンを学習する意味を考えてみたいと思います。

デザインパターンを知らなくともプログラムは書けます。では、なぜデザインパターンを学習するのでしょうか?デザインパターンを知ることによるメリットは何でしょうか?

それは「生産性」と「メンテナンス性」と説明しました。

オブジェクト指向を使用するプログラムは、初心者と達人とで大きく異なってきます。初心者から見ると達人のプログラムは難しくて理解に苦しみ、達人にとっては初心者のプログラムは修正しにくいものです。プログラミングされたものが工業製品である以上、品質に差が出るのはマイナス要素です。この差をできるだけ少なくするためにも、最初に先人たちの知恵のエッセンスであるデザインパターンを学び、オブジェクト指向の本来の意味を理解しておきましょう。

本記事中にあるサンプルコードを実際に入力・実行し、そのふるまいを確かめてください。そして、UMLでその構造とふるまいをイメージできるようになりましょう。

Adapterパターン <間にはさんでかみ合わせ>

異なるインターフェースを持つクラスの間にはさむことによってクラス間をつなげる役目をするのが、Adapterパターンです(図1)。どのようなふるまいをするのか、サンプルコードを見てみましょう。

この例では、2つのクラス(InLiveとAdaptee_TV)があります。どちらもプログラム上修正・変更できないクラスであると仮定しましょう。メソッドの内容は音楽を鑑賞するというものですが、InLiveクラスはRequest()、Adaptee_TVはspecific_Request()とメソッドの名称が異なっています。

Adapterクラスはこの2つのクラスの間に入り、Request()メソッドでspecific_Request()を実行させようとします。

実際にAdapterクラスの内部にAdaptee_TVクラスを包含します。InLiveクラスとインターフェース(ITarget)をあわせることで、Adaptee_TVクラスはRequest()メソッドを実装しなければならなくなります。

Request()メソッドの中で包含したAdaptee_TVクラスのインスタンスメソッドspscific_Request()を委譲します。こうすることで、2つのクラスをつなぐことができます。

Rarestyle
MR(医薬情報担当者)・微生物研究員を経て、化学系会社にシステム担当として従事し、システムマネジメントやインフラ整備などを行う。微生物研究員時代から数値解析など通じてプログラミングを学び、現在、Webサイト「Rarestyleへようこそ(http://www.rarestyle.net/)」を立ち上げ、パソコンコミュニティー活動・人材教育にも力を入れている。

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

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

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

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