4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事は何

デザインパターンについて、Rubyでどのような使い方ができるかをまとめた記事です。
デザインパターン自体の解説は詳しく行いません。

Adapterパターンとは

Adapterパターンとは、既存のクラスを変更せずに、新しいインターフェースに適用させるためのデザインパターンです。

詳しくはこちらをご覧ください。

Rubyでのコード例

Rubyにはインターフェースがないため、moduleで代替します。

module NewInterface
  def new_method
    fail NotImplementedError
  end
end

class OldClass
  def old_method
    'This is OldClass method'
  end
end

class Adapter < OldClass
  include NewInterface

  def new_method
    old_method
  end
end

adapter = Adapter.new
puts adapter.new_method
出力結果
This is OldClass Method

どのような時に使えるか

Rubyの場合でも、Adapterパターンが欲しくなるのは「既存のクラスに変更を加えずに、必要なインターフェースに則った処理を行いたい時」がメインになると思います。

例えば、以下のようにすでに実装されているいくつかのクラスのインターフェースを統一化し、同じように逐一処理できるようにしたいときなどに役に立ちます。

# 既存のクライアント
class ApiClient
  def fetch_data
    "API Data"
  end
end

class DatabaseClient
  def retrieve_record
     "Database Record"
  end
end

class FileClient
  def read_file
    "File Content"
  end
end

# 新しいインターフェース
module DataSource
  def get_data
    fail NotImplementedError
  end
end

# Adapterクラスの定義
class ApiClientAdapter < ApiClient
  include DataSource

  def get_data
    fetch_data
  end
end

class DatabaseClientAdapter < DatabaseClient
  include DataSource

  def get_data
    retrieve_record
  end
end

class FileClientAdapter < FileClient
  include DataSource

  def get_data
    read_file
  end
end

sources = [ApiClientAdapter.new, DatabaseClientAdapter.new, FileClientAdapter.new]

sources.each do |source|
  puts source.get_data
end
4
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?