Observer 패턴 예제

2022. 5. 26. 21:09·Language/Kotlin

Observer Interface

interface Observer {
    fun update()
}

Subject Interface

interface Subject {
    fun register(obj: Observer)
    fun unregister(obj: Observer)
    fun notifyObservers()
    fun getUpdate(obj: Observer): String
}

Topic Class

class Topic : Subject {

    private val observers: MutableSet<Observer> = mutableSetOf()
    private var message: String = ""

    override fun register(obj: Observer) {
        observers.add(obj)
    }

    override fun unregister(obj: Observer) {
        observers.remove(obj)
    }

    override fun notifyObservers() {
        observers.forEach(Observer::update)
    }

    override fun getUpdate(obj: Observer): String {
        return message
    }

    fun postMessage(message: String) {
        println("Enter the message: $message")
        this.message = message
        notifyObservers()
    }

}

TopicSubscriber Class

class TopicSubscriber(
    private val name: String,
    private val topic: Subject
) : Observer {

    override fun update() {
        val msg = topic.getUpdate(this)
        println("$name got notified about $msg")
    }
}

Main Kt

 
 
주제 서식자 클래스
fun main() {
    val topic = Topic()
    val a = TopicSubscriber("a", topic)
    val b = TopicSubscriber("b", topic)
    val c = TopicSubscriber("c", topic)
    topic.register(a)
    topic.register(b)
    topic.register(c)

    topic.postMessage("hello world!")
}

Output

소스코드

https://github.com/Kuass/KotlinObserverPattern 에서 확인 가능합니다.

 
 
반응형
저작자표시 비영리 (새창열림)
'Language/Kotlin' 카테고리의 다른 글
  • IP주소 32비트 정수 변환 및 되돌리기 AI 코드 및 성능 비교
  • Gson 직렬화/역직렬화를 이용하여 데이터를 가공하기
  • var list = mutableListOf<T>() 를 사용하지 마세요.
  • [Querydsl] n시간 이전 데이터 삭제
Kua
Kua
정보 공유, 개인 정리 공간 입니다.
  • Kua
    Kua's Miscellaneous
    Kua
    • 분류 전체보기 (185)
      • 대문 (2)
      • Tips (25)
        • Chrome (2)
        • Windows (4)
        • IDE (3)
        • 기타 (16)
      • CodingTest (44)
      • Language (20)
        • PHP (5)
        • C# (7)
        • Java (1)
        • Kotlin (7)
      • Framework & Runtime (16)
        • SpringBoot (12)
        • Node.js (2)
        • Vue.js (1)
        • Gradle (1)
      • DevOps (13)
        • Linux (1)
        • Docker (4)
        • Kubernetes (2)
        • Apache Kafka (1)
        • AWS (1)
      • 일상다반사 (53)
        • 도서 (1)
        • 개발 (8)
        • 후기 - IT (7)
        • 후기 - 일상 (13)
        • 차가리 (4)
        • 방송통신대학교 (4)
        • 음식 (2)
      • Games (12)
        • Minecraft (7)
        • VR (2)
        • 그외 (3)
  • 최근 글

  • 인기 글

  • 태그

    Algorithm
    codingtest
    c#
    spring
    minecraft
    bronze1
    코딩테스트
    알고리즘
    bronze2
    Plugin
    Silver5
    github
    백준
    Spring Boot
    갤럭시
    java
    Kotlin
    error
    후기
    Windows
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.0
Kua
Observer 패턴 예제
상단으로

티스토리툴바