ลองนึกถึงเวลาที่เราสมัครใช้งานแอพพลิเคชั่นที่เป็นโซเชี่ยลมีเดีย เมื่อมีการเปลี่ยนแปลง เช่น มีหัวข้อใหม่ หรือคนที่เราติดตามโพสต์อะไรใหม่ แอพพลิเคชั่นจะแจ้งให้เราทราบ เช่น แสดงเรื่องนั้นๆที่หน้าจอของเรา ในทางกลับกัน เมื่อเราโพสต์อะไรไปก็ตาม แอพพลิเคชั่นก็จะแจ้งไปยังผู้ใช้รายอื่นที่ติตตามเราหรือเป็นเพื่อนกับเราเช่นเดียวกัน การเขียนโปรแกรมแบบ 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