LoginSignup
4
5

More than 5 years have passed since last update.

【デザインパターン】 Adapterパターン

Last updated at Posted at 2015-06-28

概要

インタフェースに互換性の無いクラス同士を組み合わせるためのパターン

以下の4種類のクラスからなる
1. Targetクラス(2.が利用するためのインターフェイスを定義)
2. Clientクラス(1.のインターフェイスにしたがう)
3. Adapteeクラス(適合させる必要のある既存のインターフェイスを持つ)
4. Adapterクラス(3.のインターフェイスを1.のインターフェイスに適合させる)

具体例と実装

描画ソフトとOSを例にすると

上記1~4はそれぞれ
1. 描画ソフトクラス
2. ユーザークラス
3. Windows描画クラス
4. OS依存機能共通化クラス

が対応する。
コードの詳細は以下

drawing_software.rb
class DrawingSoftware
  def initialize(drawing_object)
    @drawting_object = drawing_object
  end

  def draw
    # 描画オブジェクトを描画する
    @drawing_object.draw
  end
end
user.rb
  drawing_softrware = DrawingSoftware.new(WindowsAdapter.new(drawing_object))
  drawing_software.draw
windows_drawer.rb
class WindowsDrawer
  def initialize(drawing_object)
    @drawing_object = drawing_object
  end

  def sketch
    # 描画オブジェクトの下絵を描く
    @drawing_object.sketch
  end

  def paint
    # 描画オブジェクトの下絵を仕上げ描画を完成させる
    @drawing_object.paint
  end
end
windows_adapter.rb
class WindowsAdapter
  def initialize(drawing_object)
    @drawer = WindowsDrawer.new(drawing_object)
  end

  def draw
    @drawer.sketch
    @drawer.paint
  end
end

メリット

  • 変更を加えるのが困難なクラスに手を入れずにクライアントがそれを利用できるようになる
  • 複数のアダプターを用意することで、異なる互換性のないコンポーネントに対応ができるようになる

まとめ

変更がしにくく、互換性のないクラスを組み合わせて利用する際に便利なパターン

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5