-
Notifications
You must be signed in to change notification settings - Fork 13
/
08_proxy_sample2.rb
63 lines (49 loc) · 1.29 KB
/
08_proxy_sample2.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# -*- coding: utf-8 -*-
# 銀行の入出金業務を行う(対象オブジェクト/subject)
class BankAccount
attr_reader :balance
def initialize(balance)
puts "BankAccountを生成しました"
@balance = balance
end
# 入金
def deposit(amount)
@balance += amount
end
# 出金
def withdraw(amount)
@balance -= amount
end
end
# BankAccountの生成を遅らせる仮想Proxy
class VirtualAccountProxy
def initialize(starting_balance)
puts "VirtualAccountPoxyを生成しました。BankAccountはまだ生成していません。"
@starting_balance = starting_balance
end
def balance
subject.balance
end
def deposit(amount)
subject.deposit(amount)
end
def withdraw(amount)
subject.withdraw(amount)
end
def announce
"Virtual Account Proxyが担当するアナウンスです"
end
def subject
@subject || (@subject = BankAccount.new(@starting_balance))
end
end
# ===========================================
proxy = VirtualAccountProxy.new(100)
#=> VirtualAccountPoxyを生成しました。BankAccountはまだ生成していません。
puts proxy.announce
#=> Virtual Account Proxyが担当するアナウンスです
puts proxy.deposit(50)
#=> BankAccountを生成しました
#=> 150
puts proxy.withdraw(10)
#=> 140