Pola Desain - Pola Pengamat
Pola pengamat digunakan ketika ada hubungan satu-ke-banyak antara objek seperti jika satu objek diubah, objek dependennya akan diberitahukan secara otomatis. Pola pengamat termasuk dalam kategori pola perilaku.
Penerapan
Pola pengamat menggunakan tiga kelas aktor. Subjek, Pengamat dan Klien. Subjek adalah objek yang memiliki metode untuk melampirkan dan melepaskan pengamat ke objek klien. Kami telah membuat Observer kelas abstrak dan subjek kelas konkret yang memperpanjang kelas Observer .
ObserverPatternDemo , kelas demo kami, akan menggunakan Subjek dan objek kelas konkret untuk menunjukkan pola pengamat dalam tindakan.
Langkah 1
Buat kelas Subjek.
Subject.java
import java.util.ArrayList;
import java.util.List;
public class Subject {
private List<Observer> observers = new ArrayList<Observer>();
private int state;
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
notifyAllObservers();
}
public void attach(Observer observer){
observers.add(observer);
}
public void notifyAllObservers(){
for (Observer observer : observers) {
observer.update();
}
}
}
Langkah 2
Buat kelas Observer.
Observer.java
public abstract class Observer {
protected Subject subject;
public abstract void update();
}
LANGKAH 3
Buat kelas pengamat konkret
BinaryObserver.java
public class BinaryObserver extends Observer{
public BinaryObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Binary String: " + Integer.toBinaryString( subject.getState() ) );
}
}
OctalObserver.java
public class OctalObserver extends Observer{
public OctalObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Octal String: " + Integer.toOctalString( subject.getState() ) );
}
}
HexaObserver.java
public class HexaObserver extends Observer{
public HexaObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
@Override
public void update() {
System.out.println( "Hex String: " + Integer.toHexString( subject.getState() ).toUpperCase() );
}
}
LANGKAH 4
Gunakan subjek dan objek pengamat konkret.
ObserverPatternDemo.java
public class ObserverPatternDemo {
public static void main(String[] args) {
Subject subject = new Subject();
new HexaObserver(subject);
new OctalObserver(subject);
new BinaryObserver(subject);
System.out.println("First state change: 15");
subject.setState(15);
System.out.println("Second state change: 10");
subject.setState(10);
}
}
LANGKAH 5
Verifikasi hasilnya.
First state change: 15
Hex String: F
Octal String: 17
Binary String: 1111
Second state change: 10
Hex String: A
Octal String: 12
Binary String: 1010