java學習

          java學習

           

          設計模式之觀察者模式

          觀察者模式(有時又被稱為發布(publish )-訂閱(Subscribe)模式、模型-視圖(View)模式、源-收聽者(Listener)模式或從屬者模式)是軟件設計模式的一種。在此種模式中,一個目標物件管理所有相依于它的觀察者物件,并且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統。
          public interface Observer {
          public void update(int low,int heigh,String weather);
          void removeSubject();
          }
          public interface Subject {
          public void registerObserver(Observer observer);
          public void removeObserver(Observer observer);
          public void notifyObserver();
          }
          public class Android implements Observer{
          public Android(){}
          private Subject subject;
          public Android(Subject subject) {
          this.subject = subject;
          this.subject.registerObserver(this);
          }
          @Override
          public void update(int low, int heigh, String weather) {
          System.out.println("Android" + low + "," + heigh + "," + weather);
          }
          public void removeSubject() {
          subject.removeObserver(this);
          }
          }
          public class IPad implements Observer{
          private Subject subject;
          public IPad(){}
          public IPad(Subject subject) {
          this.subject = subject;
          subject.registerObserver(this);
          }
          @Override
          public void update(int low, int heigh, String weather) {
          System.out.println("IPad " + low + "," + heigh + "," + weather);
          }
          public void removeSubject() {
          subject.removeObserver(this);
          }
          }
          public class WeatherData implements Subject{
          private int low;
          private int heigh;
          private String weather;
          private List<Observer> observerList = new ArrayList<Observer>();
          public void setData(int low,int heigh,String weather) {
          this.low = low;
          this.heigh = heigh;
          this.weather = weather;
          notifyObserver();
          }
          public int getLow() {
          return low;
          }
          public int getHeigh() {
          return heigh;
          }
          public String getWeather() {
          return weather;
          }
          @Override
          public void registerObserver(Observer observer) {
          if(!observerList.contains(observer)) {
          observerList.add(observer);
          }
          }
          @Override
          public void removeObserver(Observer observer) {
          if(observerList.contains(observer)) {
          observerList.remove(observer);
          }
          }
          @Override
          public void notifyObserver() {
          for(Observer o : observerList) {
          o.update(getLow(), getHeigh(), getWeather());
          }
          }
          }
          public class Test {
          public static void main(String[] args) {
          WeatherData wd = new WeatherData();
          Android android = new Android(wd);
          //android.removeSubject();
          IPad ipad = new IPad(wd);
          //ipad.removeSubject();
          wd.setData(2, 23, "---");
          }
          }

          posted on 2017-09-08 10:09 楊軍威 閱讀(140) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 新河县| 丽江市| 大名县| 银川市| 定兴县| 奉新县| 兰坪| 策勒县| 和平县| 翼城县| 金寨县| 泽州县| 东源县| 新化县| 红桥区| 濮阳市| 当雄县| 本溪| 虎林市| 秀山| 和硕县| 甘肃省| 邯郸县| 嘉峪关市| 禄丰县| 湖南省| 南漳县| 青浦区| 洮南市| 阜康市| 浦城县| 巴林右旗| 塘沽区| 中方县| 香港 | 顺昌县| 文昌市| 蒙阴县| 民县| 镇远县| 沭阳县|