Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Created August 11, 2016 05:42
Show Gist options
  • Save KentarouKanno/79e6e7d6268a5a028138c1dcc11d7518 to your computer and use it in GitHub Desktop.
Save KentarouKanno/79e6e7d6268a5a028138c1dcc11d7518 to your computer and use it in GitHub Desktop.
Proxy

Proxy

・オブジェクトへのアクセスをフックするための代理オブジェクトを提供する
(インタフェースを変更せずに機能追加する)
・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"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment