アダプターパターンとは

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

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

アダプターパターン(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のセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。