java學習

          java學習

           

          設(shè)計模式之觀察者模式

          觀察者模式(有時又被稱為發(fā)布(publish )-訂閱(Subscribe)模式、模型-視圖(View)模式、源-收聽者(Listener)模式或從屬者模式)是軟件設(shè)計模式的一種。在此種模式中,一個目標物件管理所有相依于它的觀察者物件,并且在它本身的狀態(tài)改變時主動發(fā)出通知。這通常透過呼叫各觀察者所提供的方法來實現(xiàn)。此種模式通常被用來實現(xiàn)事件處理系統(tǒng)。
          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)  編輯  收藏


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


          網(wǎng)站導航:
           

          導航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 甘孜| 武威市| 寻乌县| 小金县| 辽阳县| 沙雅县| 云安县| 宣武区| 宁海县| 乳山市| 都匀市| 景洪市| 墨玉县| 宾川县| 黄平县| 高台县| 湖北省| 观塘区| 东丽区| 迭部县| 边坝县| 武宣县| 湖北省| 黎川县| 无极县| 图木舒克市| 横山县| 电白县| 芮城县| 堆龙德庆县| 宜黄县| 慈利县| 宕昌县| 偃师市| 开远市| 徐水县| 沭阳县| 资溪县| 潼南县| 西充县| 巴中市|