Delegate Pattern(1)의 Counter
와 Control
의 예시처럼, Control
은 Counter
의 권한을 필요 이상으로 가지고 있다. Protocol을 이용함으로써,Control
에서 Counter
로 부터 위임받은 권한을 제한할 수 있다.!!!!
아래의 예시처럼, CounterDelegate
는 오직 increment 메소드만 가지고 있다.
protocol CounterDelegate {
func increment() -> Void
}
Control
의 예시
class Control {
private var delegate: CounterDelegate // Counter가 아닌 CounterDelegate를 참조한다.
init(delegate: CounterDelegate) {
self.delegate = delegate
}
func buttonClicked() {
self.delegate.increment()
}
}
CounterDelegate
의 Protocol사용을 위한, Counter
에서의 허용(?) -> 내가 이해한 바로는, CounterDelegate라는 추상 메소드를 만들고, Counter에서 구현을 한 뒤, Control에서 사용하는 것????
class Counter: CounterDelegate { // Counter를 선언할 때, Type을 지정하면 됨
private var counter: Int = 0 {
didSet { print("Valor do contador: \(counter)") }
}
func increment() {
self.counter += 1
}
}
전체 코드...
protocol CounterDelegate {
func increment() -> Void
}
// Delegate
class Counter: CounterDelegate {
private var value: Int = 0 {
didSet { print("Counter value: \(value)") }
}
func increment() {
self.value += 1
}
}
// Delegator
class Control {
private var delegate: CounterDelegate
init(delegate: CounterDelegate) {
self.delegate = delegate
}
func buttonClicked() {
self.delegate.increment()
}
}
let counter = Counter()
let control = Control(delegate: counter)
control.buttonClicked()
// Counter value: 1
control.buttonClicked()
// Counter value: 2