Observer Pattern

Mari kita bahas Observer Pattern, salah satu pola desain perilaku (behavioral pattern) yang sangat populer selain Strategy Pattern.

Observer Pattern adalah pola desain di mana sebuah objek, yang disebut subject, mengelola daftar objek lain yang bergantung padanya, yang disebut observers. Subject secara otomatis akan memberi tahu semua observers-nya setiap kali ada perubahan keadaan (state change).

Analogi Sederhana: 📢

Bayangkan Anda berlangganan (subscribe) sebuah kanal YouTube.

  • Kanal YouTube adalah Subject.

  • Anda (dan subscriber lainnya) adalah Observers.

Ketika kanal YouTube mengunggah video baru (ini adalah "perubahan keadaan"), YouTube secara otomatis mengirimkan notifikasi kepada Anda dan semua subscriber lainnya. Kanal tidak perlu tahu siapa saja Anda secara spesifik, ia hanya tahu memiliki daftar subscriber yang harus diberi tahu. Anda pun tidak perlu terus-menerus memeriksa kanal tersebut; Anda akan diberi tahu secara otomatis.

Inilah inti dari Observer Pattern: menciptakan hubungan satu-ke-banyak (one-to-many) antara objek, sehingga jika satu objek berubah, semua yang bergantung padanya akan diperbarui secara otomatis.


## Implementasi di Go

Dalam Go, kita akan menggunakan interface untuk mendefinisikan peran Subject dan Observer.

Skenario: Sebuah toko online (Store) sebagai Subject. Pelanggan (Customer) sebagai Observers yang tertarik pada produk baru. Ketika produk baru tiba di toko, semua pelanggan yang terdaftar akan mendapatkan notifikasi.

1. Definisikan Interface

package main

// Observer Interface
type Observer interface {
    Update(productName string)
    GetID() string
}

// Subject Interface
type Subject interface {
    Register(observer Observer)
    Deregister(observer Observer)
    NotifyAll()
}

2. Buat Concrete Subject dan Concrete Observer

Store adalah Concrete Subject dan Customer adalah Concrete Observer.

3. Penggunaan di Client (main.go)

Output Go:


## Implementasi di Java

Implementasi di Java sangat mirip secara konsep, menggunakan interface dan kelas.

1. Definisikan Interface

Observer.java

Subject.java

2. Buat Concrete Subject dan Concrete Observer

Store.java (Concrete Subject)

Customer.java (Concrete Observer)

3. Penggunaan di Client (Main.java)

Output Java:

Last updated