・オブジェクトへのアクセスをフックするための代理オブジェクトを提供する
(インタフェースを変更せずに機能追加する)
・Proxy は英語で代理人
参考URL: Adapter, Facade, Proxy パターンの違いのメモ
class Target {
func printInt(num: Int) {
print(num)
}
func printString(str: String) {
print(str)
}
}
class Proxy {
var target: Target!
var addCount = 0
var intCache = 0
var upperString = ""
var stringCache = ""
init(target: Target) {
self.target = target
}
func printInt(num: Int) {
target.printInt(num)
addCount += 1
intCache = num
}
func printString(str: String) {
target.printString(str)
upperString = str.uppercaseString
stringCache = str
}
}
var target = Target()
var proxy = Proxy(target: target)
proxy.printInt(5)
proxy.printString("abc")
proxy.upperString
//=> "ABC"