Observe Pattern
Observer using java implementation
public class Main {
public static void main(String[] args) {TwitterStream ts = new TwitterStream();Client c1 = new Client("Pal");Client c2 = new Client("Rod");ts.addObserver(c1);ts.addObserver(c2);ts.someoneTweeted();}}class TwitterStream extends Observable{public void someoneTweeted(){setChanged();notifyObservers();}}class Client implements Observer{private String name;public Client(String name){this.name = name;}@Overridepublic void update(Observable o, Object arg) {System.out.println("Updating " + name + " someone has tweeted something");}}
Observer using own implementation
Main
public static void main(String[] args) {
Subject subject = new MessageStream();
PhoneClient pc = new PhoneClient(subject);
TabletClient tc = new TabletClient(subject);
pc.addMessage("Message from phone");
tc.addMessage("Message from tablet");
}
Subject
public abstract class Subject {
private List<Observer> observers = new ArrayList<Observer>();
abstract void setState(String state);
abstract String getState();
public void attach(Observer obs){
observers.add(obs);
}
public void detach(Observer obs){
observers.remove(obs);
}
public void notifyObservers(){
for (Observer observer : observers) {
observer.update();
}
}
}
Observer
public abstract class Observer {
protected Subject subject;
abstract void update();
}
PhoneClient
public class PhoneClient extends Observer {
public PhoneClient(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
public void addMessage(String message){
this.subject.setState(message + " - sent from phone");
}
@Override
void update() {
System.out.println("Phone Stream: " + subject.getState() );
}
}
TabletClient
public class TabletClient extends Observer {
public TabletClient(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
public void addMessage(String message){
this.subject.setState(message + " - sent from phone");
}
@Override
void update() {
System.out.println("Tablet Stream: " + subject.getState() );
}
}
Comentarios
Publicar un comentario