觀察者模式

觀察者模式

標籤(空格分隔): 設計模式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("發做業啦");
    }
}
相關文章
相關標籤/搜索