この記事は何
デザインパターンについて、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