java學習

          java學習

           

          設計模式之觀察者模式

          概述:
          定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。
          適用性:
          1.當一個抽象模型有兩個方面,其中一個方面依賴于另一方面。 將這二者封裝在獨立的對象中以使它們可以各自獨立地改變和復用。 2.當對一個對象的改變需要同時改變其它對象,而不知道具體有多少對象有待改變。 3.當一個對象必須通知其它對象,而它又不能假定其它對象是誰。
          我們以天氣預報的服務為例,安卓和諾基亞購買天氣預報的服務,也可以停用服務:
          天氣預報主體的接口:
          public interface Subject {

              public void zhuce(Observer observer);

              public void remove(Observer observer);

              public void tongzhi();
          }
          天氣預報的實現類:
          public class WeatherData implements Subject {

              private int low;
              private int hight;
              private String weather;
              private List<Observer> list = new ArrayList<Observer>();

              public void setData(int low, int hight, String weather) {
                  this.low = low;
                  this.hight = hight;
                  this.weather = weather;
                  tongzhi();
              }

              public int getLow() {
                  return low;
              }

              public int getHight() {
                  return hight;
              }

              public String getWeather() {
                  return weather;
              }

              public void zhuce(Observer observer) {
                  if (!list.contains(observer)) {
                      list.add(observer);
                  }

              }

              public void remove(Observer observer) {
                  if (list.contains(observer)) {
                      list.remove(observer);
                  }

              }

              public void tongzhi() {
                  for (Observer o : list) {
                      o.update(getLow(), getHight(), getWeather());
                  }

              }

          }
          觀察者的接口:
          public interface Observer {

              void remove();

              void update(int low, int hight, String weather);
          }
          觀察者的實現類:
          public class Android implements Observer {

              private Subject subject;

              public Android() {
              }

              public Android(Subject subject) {
                  this.subject = subject;
                  this.subject.zhuce(this);
              }

              public void update(int low, int hight, String weather) {
                  System.out.println("android" + low + "" + hight + weather);

              }

              public void remove() {
                  subject.remove(this);
              }
          }
          public class Nokia implements Observer{
              
              private Subject subject;
              public Nokia(){}
              public Nokia(Subject subject){
                  this.subject = subject;
                  this.subject.zhuce(this);
              }

              public void update(int low, int hight, String weather) {
                  System.out.println("nokia:"+low+"-"+hight+"-"+weather);
                  
              }

              public void remove(){
              subject.remove(this);
          }
          }
          測試類:

          public class Test {
              public static void main(String[] args) {

                  WeatherData wd = new WeatherData();
                  wd.setData(1, 22, "晴朗");
                  Android a = new Android(wd);
                  wd.tongzhi();
                  a.remove();
                  Nokia n = new Nokia(wd);
                  n.remove();
                  wd.tongzhi();
                  
              }
          }

          posted on 2013-04-18 17:29 楊軍威 閱讀(161) 評論(0)  編輯  收藏


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


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁河县| 西吉县| 抚宁县| 蓬莱市| 呼和浩特市| 宜城市| 昌江| 台北县| 宜丰县| 扶沟县| 榕江县| 革吉县| 和政县| 东乡族自治县| 宁津县| 瓦房店市| 黑山县| 行唐县| 蓬安县| 繁昌县| 都安| 许昌市| 武乡县| 乐昌市| 高碑店市| 台山市| 油尖旺区| 郧西县| 白水县| 巢湖市| 邵阳县| 彩票| 苏尼特左旗| 成都市| 拉萨市| 霸州市| 交城县| 迁西县| 库车县| 黄龙县| 丽江市|