標籤(空格分隔): 設計模式java
觀察者模式: 當對象之間存在一對多的關係的時候, 則使用觀察者模式. 好比當一個對象唄修改的時候, 則會自動通知他的依賴對象, 觀察者模式屬於行爲模式設計模式
觀察者模式實現了動態聯動
觀察者模式實現了廣播通訊ide
如一個主題被大量觀察者觀察, 則通知全部的觀察者的代價較高.
若是某些觀察者的相應方法被阻塞, 整個通知過程也會被阻塞, 其餘觀察者不能及時被通知.this
public interface Observer { void update(String info); }
public class StudentObserver implements Observer { private String name; public StudentObserver(String name) { this.name = name; } @Override public void update(String info) { System.out.println(name+"收到消息"+info); } }
import java.util.ArrayList; import java.util.List; public interface Subject{ void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(String msg); }
import java.util.ArrayList; import java.util.List; public class TeacherSubject implements Subject{ //用來存放和記錄觀察者 private List<Observer> observers=new ArrayList<Observer>(); @Override public void registerObserver(Observer obj) { //增長觀察者 observers.add(obj); } @Override public void removeObserver(Observer obj) { //刪除觀察者 int i = observers.indexOf(obj); if( i >= 0 ) observers.remove(obj); } @Override public void notifyObservers(String msg) { //通知消息 for(Observer observer : observers) { observer.update(msg); } } }
public class Test { public static void main(String[] args){ TeacherSubject teacher = new TeacherSubject(); StudentObserver studentObserver1 = new StudentObserver("鳴人"); StudentObserver studentObserver2 = new StudentObserver("佐助"); teacher.registerObserver(studentObserver1); teacher.registerObserver(studentObserver2); teacher.notifyObservers("發做業啦"); } }