Rubyでデザインパターン proxyパターン

class Door

  def open
    puts 'open door!'
  end

  def close
    puts 'close door!'
  end

end

class SecurityDoor

  def initialize(door)
    @door = door
  end

  def open(password)
    if password == 'open goma!'
      @door.open
    else
      puts 'password fail'
    end
  end

  def close(password)
    if password == 'close goma!'
      @door.close
    else
      puts 'password fail'
    end
  end

end


door = Door.new
security_door = SecurityDoor.new(door)

security_door.open('valid_password!')
security_door.open('open goma!')

DoorクラスをラップするSecurityDoorクラスを定義しています。
そこでパスワードを確認する処理を挟んで本来アクセスしたいであろうDoorクラスへのアクセスを制御しています。
ここがポイントでアクセス制御がproxyパターンの目的です。
場合によってはdecoratorパターンと実装がかなり似ることがありますが目的が違います。
proxyパターンの目的はアクセス制御
decoratorパターンの目的は機能の追加です。