ลองนึกถึงเวลาที่เราสมัครใช้งานแอพพลิเคชั่นที่เป็นโซเชี่ยลมีเดีย เมื่อมีการเปลี่ยนแปลง เช่น มีหัวข้อใหม่ หรือคนที่เราติดตามโพสต์อะไรใหม่ แอพพลิเคชั่นจะแจ้งให้เราทราบ เช่น แสดงเรื่องนั้นๆที่หน้าจอของเรา ในทางกลับกัน เมื่อเราโพสต์อะไรไปก็ตาม แอพพลิเคชั่นก็จะแจ้งไปยังผู้ใช้รายอื่นที่ติตตามเราหรือเป็นเพื่อนกับเราเช่นเดียวกัน การเขียนโปรแกรมแบบ observer เป็นการสร้างความสัมพันธ์ในลักษณะดังตัวอย่างที่กล่าวมา โดยบทบาทของแอพพลิเคชั่นเรียกว่า observable บทบาทของเราในฐานะผู้ที่สมัครสมาชิกเรียกว่า observer และมีอัลกอริธึมที่เกี่ยวกับการสมัครเพื่ออยู่ในรายชื่อของอีกฝ่าย ตัว observer จะคอยแจ้งเตือนเมื่อมีเหตุการณ์หรือเมื่อมีการเปลี่ยนแปลงสถานะใดๆ การเขียนโปรแกรมแบบ observer จะช่วยเพิ่มความเป็นอิสระของแต่ละออบเจกต์เพราะไม่ต้องมีการเชื่อมต่อกันตลอดเวลา การเขียนโปรแกรมแบบ observer เป็น 1 ในกลุ่มของการเขียนโปรแกรมแบบ behavioral

วิธีการคือสร้างออบเจกต์ที่เป็น observable และ observer โดยแต่ละออบเจกต์จะเรียกใช้เมธอดของอีกตัวในการสื่อสารระหว่างกัน

interface Observable { // โครงสร้างพื้นฐานของ observable คือ เพิ่ม/ลบ  สมาชิก และ การแจ้งเตือน
    public void addObserver(Observer observer);
    public void removeObserver(Observer observer);
    public void notifyObserver();
}

class SocialApp implements Observable {
    private ArrayList<Observer> observers = new ArrayList<>(); // เก็บรายชื่อของ observer

    @Override
    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    public void releaseNewVideo(String video) {
        System.out.println("Release new video : " + video);
        notifyObserver(); // แจ้งเตือน observer เมื่อมีโพสต์ใหม่มา
    }

    @Override
    public void notifyObserver() { // วนรอบแจ้งเตือนสมาชิกทั้งหมด
        for(Observer observer: observers) {
            observer.update(); // แจ้งเตือนโดยการเรียกเมธอด update() ของแต่ละสมาชิก
        }
    }
}

interface Observer {
    public void update();
}

class SocialAppSubscriber implements Observer {

    private Observable observable; // การผูกกับ observable

    public SocialAppSubscriber(Observable observable) {
        this.observable = observable;
    }

    @Override
    public void update() { // โพสต์ไปยัง observable
        System.out.println("New video on channel!");
    }
}

ตัวอย่างการใช้งาน

package com.company;

import java.util.ArrayList;

class Main {
public static void main(String[] args) {
SocialApp Channel = new SocialApp();
SocialAppSubscriber subscriberA = new SocialAppSubscriber(Channel);
SocialAppSubscriber subscriberB = new SocialAppSubscriber(Channel);
SocialAppSubscriber subscriberC = new SocialAppSubscriber(Channel);
Channel.addObserver(subscriberA);
Channel.addObserver(subscriberB);
Channel.addObserver(subscriberC);
Channel.releaseNewVideo("Cooking with Mark : Lazy burger");
Channel.releaseNewVideo("Art : new graffiti in my town");
Channel.releaseNewVideo("Cooking with Mark : Rapid egg boiling");
}
}

ใน Java API การเขียนโปรแกรมแบบ observer เช่น Event Listener