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パターンの目的は機能の追加です。