设计模式学习笔记(六、行为型-观察者模式)
1 /** 2 * 被观察者 3 * 4 * @author zhoude 5 * @date 2020/4/12 14:48 6 */ 7 public interface Observer { 8 9 /** 10 * 接受观察者的通知消息 11 * 12 * @param message 通知消息 13 */ 14 void notify(String message); 15 }
1 public interface Subject { 2 3 /** 4 * 添加一个被观察者 5 * 6 * @param observer 被观察者 7 */ 8 void addObserver(Observer observer); 9 10 /** 11 * 移除一个被观察者 12 * 13 * @param observer 被观察者 14 */ 15 void removeObserver(Observer observer); 16 17 /** 18 * 给被观察者发送消息 19 * 20 * @param message 通知消息 21 */ 22 void notifyObservers(String message); 23 }
1 public class SubjectImpl implements Subject { 2 3 private List<Observer> observers = new ArrayList<>(); 4 5 @Override 6 public void addObserver(Observer observer) { 7 observers.add(observer); 8 } 9 10 @Override 11 public void removeObserver(Observer observer) { 12 observers.remove(observer); 13 } 14 15 @Override 16 public void notifyObservers(String message) { 17 for (Observer observer : observers) { 18 observer.notify(message); 19 } 20 } 21 }
1 public class ObserverImpl1 implements Observer { 2 3 @Override 4 public void notify(String message) { 5 System.err.println("observer1 message:" + message); 6 } 7 }
1 public class ObserverImpl2 implements Observer { 2 3 @Override 4 public void notify(String message) { 5 System.err.println("observer2 message:" + message); 6 } 7 }
1 public class Test { 2 3 public static void main(String[] args) { 4 Subject subject = new SubjectImpl(); 5 subject.addObserver(new ObserverImpl1()); 6 subject.addObserver(new ObserverImpl2()); 7 subject.notifyObservers("msg"); 8 } 9 }