アダプターパターン

アダプターパターンは、既存のクラス(インターフェース)を、クライアントが求める別のインターフェースに変換するためのデザインパターンのことであり、インターフェースの互換性がないクラス同士を連携させ、コードの再利用性を高め、既存コードへの影響を最小限に抑えるための構造的なデザインパターンのことです。

アダプターパターンの概要と目的

アダプターパターン(Adapter Pattern)は、GoF(Gang of Four、四人組)によって提唱された23種類のデザインパターンのうちの一つであり、異なるインターフェースを持つクラスをブリッジ(橋渡し)するための手法です。

このパターンは、現実世界の変換アダプター(例えば、異なる形状の電源プラグを変換するアダプター)と類似しています。

  • 目標: 既に存在するクラスを利用したいが、そのクラスが提供しているインターフェース(メソッド名や引数の形式)が、利用側のコード(クライアント)が要求するインターフェースと一致しない場合に、間にアダプター(変換役)を挟むことで、両者が連携できるようにします。
  • 効果: 既存のコードを変更することなく(既存コードを修正することなく)、新しい要求に対応できるため、結合度を下げ、保守性や拡張性を高めることができます。

主な目的は、インターフェースの不一致によって発生する再利用性の問題を解決することです。

アダプターパターンの構成要素と種類

アダプターパターンを構成する主要な要素は以下の通りです。

  1. ターゲット(Target): クライアントが求めているインターフェースを定義します。クライアントはこのインターフェース経由でアダプターとやり取りします。
  2. クライアント(Client): ターゲットインターフェースを使用して協調動作するオブジェクト群です。
  3. アダプティー(Adaptee): 既に存在しており、利用したいがインターフェースがターゲットと異なるクラスです。
  4. アダプター(Adapter): ターゲットインターフェースを実装し、内部でアダプティーの処理を呼び出すことで、ターゲットからアダプティーへの橋渡しを行うクラスです。

アダプターパターンには、主に以下の二つの実装方法があります。

1. クラスアダプターパターン(Class Adapter Pattern)

多重継承が可能な言語(例:C++)や、単一継承でもインターフェースの実装として表現できる言語(例:Java、C#)で利用されます。

  • 実装: アダプタークラスが、ターゲットインターフェースを実装し、かつ、アダプティークラスを継承します。
  • 特徴: アダプタークラスは、アダプティーの振る舞いを直接継承するため、アダプティー内部の保護されたメソッドなどにもアクセスできます。ただし、一つのアダプティーしか扱えません。

2. オブジェクトアダプターパターン(Object Adapter Pattern)

最も一般的で広く使用される実装方法です。

  • 実装: アダプタークラスが、ターゲットインターフェースを実装し、かつ、アダプティーオブジェクトをフィールドとして保持(コンポジション)します。
  • 特徴: アダプタークラスは、保持しているアダプティーオブジェクトに対してメソッド呼び出しを行うことで処理を委譲します。コンポジションを利用するため、アダプターは複数のアダプティークラスに対応でき、柔軟性が高いのが利点です。

アダプターパターンの適用例

IT分野での適用例

  • レガシーシステムの統合: 既存の古いシステム(レガシーシステム)のAPIやデータ構造を、最新のシステムが要求する新しいインターフェースに変換するアダプターとして機能します。
  • サードパーティ製ライブラリの利用: 外部ライブラリのクラスが、自社のフレームワークの標準的なインターフェースと一致しない場合に、間にアダプターを挟んで統一的な呼び出し方を実現します。
  • JavaにおけるI/Oストリーム: InputStreamReaderがバイトストリームを文字ストリームに変換するアダプターとして機能するなど、入出力処理で頻繁に使用されます。

関連用語

ソースコード | 今更聞けないIT用語集
クラス図 | 今更聞けないIT用語集
ソフトウェアエンジニアリング

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

クラウドネイティブ技術とアジャイル手法を駆使し、市場投入スピード(Time-to-Market)を最大化。「進化し続けるアプリケーション」を開発します。初期リリースを最速化し、拡張性と柔軟性を備えた、ビジネスの成長に追従できるアプリケーションを開発します。

DX・AI戦略支援

「何から手を付けるべきか分からない」「AIを導入したいが、費用対効果が見えない」といった経営課題に対し、技術とビジネスの両面から解を導き出します。 絵に描いた餅で終わる戦略ではなく、エンジニアリングの実装能力に基づいた、「実現可能で、勝てる技術戦略」を策定します。


リファクタリング・リアーキテクチャ

「システムが古くて改修できない」「障害が頻発する」といった技術的負債を解消します。既存資産の徹底的な診断に基づき、コードのクリーン化(リファクタリング)や、クラウドへの移行(リアーキテクチャ)を行い、システムの寿命を延ばしコストを最適化します。