만약에 UITextField 라는 구조를 만들던 상황이라고 가정해보자
UITextField 라는 클래스를 만들 때 이걸 만들던 사람들은
어떤 클래스에서 UITextField를 쓸 건지 모른다!
그래서 UITextField의 기능들을 대리해서 처리해줄 방법으로
delegate 프로토콜을 채택해 위임해서 기능들을 사용하게 되는 것이
Delegate Design Pattern
protocol AdvancedLifeSupport {
func performCPR()
}
class EmergencyCallHandler {
var delegate: AdvancedLifeSupport?
func assessSituation() {
print("Can you tell me what happened?")
}
func medicalEmergency() {
delegate?.performCPR()
}
}
struct Paramedic: AdvancedLifeSupport {
init(handler: EmergencyCallHandler) {
handler.delegate = self
}
func performCPR() {
print("The paramedic does ches compressions, 30 per second.")
}
}
class Doctor: AdvancedLieSupport {
init(handler: EmergencyCallHandler) {
handler.delegate = self
}
func performCPR() {
print("The doctor does chest compressions, 30 per second.")
}
func useStethescope() {
print("Listening for heart sounds")
}
}
class Surgeon: Doctor {
override func performCPR() {
super.performCPR()
print("Sings staying alive")
}
}
let emilio = EmergencyCallHandler()
let pete = Paramedic(handler: emilio)
let angela = Surgeon(handler: emilio)
emilio.assessSituation()
emilio.medicalEmergency()