「Rubyによるデザインパターン」の読書メモです。
Proxy で重複を取り除いたパターン
test.rb
class BankAccount
attr_reader :balance
def initialize(starting_balance=0)
@balance = starting_balance
end
def deposit(amount)
@balance += amount
end
def withdraw(amount)
@balance -= amount
end
end
class AccountProxy
def initialize(real_account)
@subject = real_account
end
def method_missing(name, *args)
p "Delegating #{name} message to subject."
@subject.send(name, *args)
end
end
ap = AccountProxy.new(BankAccount.new(100))
ap.deposit(25)
ap.withdraw(50)
p ap.balance
出力結果
$ ruby test.rb
"Delegating deposit message to subject."
"Delegating withdraw message to subject."
"Delegating balance message to subject."
75
method_missing をオーバーライドして、委譲メソッドを別々に定義しなくても良くなりました。
Proxy パターンの注意
method_missingの使いすぎは、継承の使いすぎと同様、あなたのコードをわかりにくくしてしまう代表的な原因になるということです。
次に来る実装者には、実装により意図が伝わるようにしてください。