Observer Pattern =
publisher + subscriber.
The observer
pattern is a software design pattern in
which an object, called the subject, maintains a
list of its dependents, called observers, and notifies them automatically of
any state changes, usually by calling one of their methods. It is mainly used to implement
distributed event handling systems. The Observer pattern is
also a key part in the familiar Model View Controller (MVC) architectural
pattern
This pattern has
been used in GUI action mechanism.
Here is a typical example about head hunter. Job seekers subscribe to a head
hunter, and get noticed when head hunter have job information.
Subject interface.
package
com.programcreek.designpatterns.observer;
public interface Subject {
public void
registerObserver(Observer o);
public void
removeObserver(Observer o);
public void
notifyAllObservers();
}
Observer interface.
package
com.programcreek.designpatterns.observer;
public interface Observer {
public void
update(Subject s);
}
HeadHunter class implements Subject.
package
com.programcreek.designpatterns.observer;
import java.util.ArrayList;
public class HeadHunter implements Subject{
//define a list of users,
such as Mike, Bill, etc.
private
ArrayList<Observer> userList;
private
ArrayList<String> jobs;
public HeadHunter(){
userList
= new ArrayList<Observer>();
jobs =
new ArrayList<String>();
}
@Override
public void
registerObserver(Observer o) {
userList.add(o);
}
@Override
public void
removeObserver(Observer o) {}
@Override
public void
notifyAllObservers() {
for(Observer
o: userList){
o.update(this);
}
}
public void addJob(String
job) {
this.jobs.add(job);
notifyAllObservers();
}
public
ArrayList<String> getJobs() {
return
jobs;
}
public String toString(){
return
jobs.toString();
}
}
JobSeeker is an observer.
package com.programcreek.designpatterns.observer;
public class JobSeeker implements Observer
{
private String name;
public JobSeeker(String
name){
this.name
= name;
}
@Override
public void
update(Subject s) {
System.out.println(this.name
+ " got notified!");
//print
job list
System.out.println(s);
}
}
Start Point.
import
com.programcreek.designpatterns.observer.HeadHunter;
import
com.programcreek.designpatterns.observer.JobSeeker;
public class Main
{
public static void
main(String[] args) {
HeadHunter
hh = new HeadHunter();
hh.registerObserver(new
JobSeeker("Mike"));
hh.registerObserver(new
JobSeeker("Chris"));
hh.registerObserver(new
JobSeeker("Jeff"));
//Each
time, a new job is added, all registered job seekers will get noticed.
hh.addJob("Google
Job");
hh.addJob("Yahoo
Job");
}
}
Kindly provide your valuable feedback in comment box.
No comments:
Post a Comment