- 객체의 확장성을 향상시키기 위해서 주로 사용되는 패턴으로, 객체에서 동작을 처리하는
구현부와 확장을 위한 추상부를 분리한다. - 즉, 기능과 구현에 대해서 두 개의 별도의 클래스로 구현한다.
- (인용) 구현(Implemetation) 으로 부터 추상(Abstraction) 레이어를 분리하여, 이 둘이 서로 독립적으로 관리 될 수 있도록 한다.
// 확장성을 위한 인터페이스interfaceMorseCode {
fundot()
fundash()
funspace()
}
// 객체의 동작을 대신 실행시켜 주는 중간 위임자(Bridge)classMorseCodeDelegate(privatevalmorseCode:MorseCode) {
fundot() {
morseCode.dot()
}
fundash() {
morseCode.dash()
}
funspace() {
morseCode.space()
}
}
// 1. 점, 선, 여백으로 표기하는 모스코드 구현체classDottedMorseCode : MorseCode {
overridefundot() {
println(".")
}
overridefundash() {
println("-")
}
overridefunspace() {
println("")
}
}
// 2. 소리로 표기하는 모스코드 구현체classSoundMorseCode : MorseCode {
overridefundot() {
println("삣!")
}
overridefundash() {
println("삐~~")
}
overridefunspace() {
println("음")
}
}
// 3. 빛으로 표기하는 모스코드 구현체classFlashMorseCode : MorseCode {
overridefundot() {
println("번쩍!")
}
overridefundash() {
println("반짝!!")
}
overridefunspace() {
println(" - ")
}
}
funmain() {
val morseCode1 =MorseCodeDelegate(morseCode =DottedMorseCode()) // 점,선,여백
morseCode1.dot()
morseCode1.dash()
morseCode1.space()
val morseCode2 =MorseCodeDelegate(morseCode =SoundMorseCode()) // 소리
morseCode2.dot()
morseCode2.dash()
morseCode2.space()
val morseCode3 =MorseCodeDelegate(morseCode =FlashMorseCode()) // 빛
morseCode3.dot()
morseCode3.dash()
morseCode3.space()
}