public interface Subject {
void addSubscriber(Observer observer);
void removeSubscriber(Observer observer);
void notifySubscribers();
}
public interface Observer {
public void update(String email);
}
import java.util.ArrayList;
import java.util.List;
public class Newsletter implements Subject {
protected List<Observer> observers = new ArrayList<>();
protected String name;
protected String newEmail;
public Newsletter(String name) {
this.name = name;
}
public void addNewEmail(String newEmail) {
this.newEmail = newEmail;
notifySubscribers();
}
左右滑动查看完整代码public void addSubscriber(Observer observer) {
observers.add(observer);
}
左右滑动查看完整代码public void removeSubscriber(Observer observer) {
observers.remove(observer);
}
左右滑动查看完整代码public void notifySubscribers() {
observers.forEach(observer -> observer.update(newEmail));
}
}
class Subscriber implements Observer {
private String name;
public Subscriber(String name) {
this.name = name;
}
@Override public void update(String newEmail) {
System.out.println("Email for: " + name + " | Content:" + newEmail);
}
}
public class SendEmailMain {
public static void main(String[] args) {
Newsletter newsLetter = new Newsletter("Java Challengers");
Observer duke = new Subscriber("Duke");
Observer juggy = new Subscriber("Juggy");
Observer dock = new Subscriber("Moby Dock");
newsLetter.addSubscriber(duke);
newsLetter.addNewEmail("Lambda Java Challenge");
newsLetter.removeSubscriber(duke);
newsLetter.addSubscriber(juggy);
newsLetter.addSubscriber(dock);
newsLetter.addNewEmail("Virtual Threads Java Challenge");
}
}
Email for: Duke | Content:Lambda Java Challenge
Email for: Juggy | Content:Virtual Threads Java Challenge
Email for: Moby Dock | Content:Virtual Threads Java Challenge
原文链接:
https://www.infoworld.com/article/3682139/intro-to-the-observable-design-pattern.html