設計模式-觀察者模式

觀察者模式(Observer Patterns)java

    觀察者模式:定義了對象間一對多的依賴,這樣一來,當一個對象的狀態改變時,它的全部依賴都會自動收到通知並自動更新。android

    如今有一種需求:IOS系統的手機和Android的手機都去訂閱天氣預報。那麼提供天氣狀況的就是一個主題。而Iphone和Android就是觀察者,來觀察天氣預報的變化。當天氣發生變化的時候在他們兩者都可以數據同步。
     1.建立觀察者(Observer)接口iphone

public interface Observer {
 
    public void update(int low, int high, String weather);
 
}

   2.建立主題(Subject)接口測試

public interface Subject {
    public void addObserver(Observer observer);
    public void removeObserver(Observer observer);
    public void notifyObserver();
}

  3.添加Weather對象實現Subject接口this

public class WeatherData implements Subject{
    private int low ;
    private int high;
    private String weather;
    private List<Observer> list = new ArrayList<Observer>();//list集合中放的都是Observer的實現類
    //get方法
    public int getLow() {
        return low;
    }
 
    public int getHigh() {
        return high;
    }
 
    public String getWeather() {
        return weather;
    }
     
    //設置low high weather
    public void setData(int low ,int high,String weather){
        this.low = low ;
        this.high = high;
        this.weather = weather;
        notifyObserver();
    }
     
     
     
    //添加觀察者
    public void addObserver(Observer observer) {
        if(!list.contains(observer)){
            list.add(observer);
        }
    }
    //刪除觀察者
    public void removeObserver(Observer observer) {
        if(list.contains(observer)){
            list.remove(observer);
        }
    }
    //通知
    public void notifyObserver() {
        for(Observer o : list){
            o.update(getLow(),getHigh(),getWeather());
        }
    }
 
}

4.分別建立Iphone和Android類實現Observer接口spa

public class Iphone implements Observer{
     
    public void display(int low ,int high ,String weather){
        System.out.println("Iphone:"+low + high + weather);
    }
 
    public void update(int low, int high, String weather) {
        display(low, high, weather);
    }
}
public class Android implements Observer{
     
    public void display(int low ,int high ,String weather){
        System.out.println("Android:"+low + high + weather);
    }
 
    public void update(int low, int high, String weather) {
        display(low, high, weather);
    }
}

5.測試code

public class test {
    public static void main(String[] args) {
        WeatherData wd = new WeatherData();
        Android android = new Android();
        Iphone iphone = new Iphone(); 
        wd.addObserver(android);//把android添加進去
        wd.addObserver(iphone );//把iphone 添加進去
        wd.setData(11, 33,"晴天");    //當改變主題時,android, iphone 都會收到通知
        wd.setData(13, 23, "陰天");
    }
}
相關文章
相關標籤/搜索