<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    活到老,學(xué)到老

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      9 Posts :: 1 Stories :: 2 Comments :: 0 Trackbacks

        概念:觀察者模式定義了一對(duì)多依賴(lài),這樣一來(lái),當(dāng)一個(gè)對(duì)象改變狀態(tài)時(shí),它的所有依賴(lài)者都會(huì)收到通知并自動(dòng)更新。

        舉個(gè)網(wǎng)上商城的例子,比如很多顧客對(duì)某個(gè)商品感興趣,把商品收藏,當(dāng)該商品降價(jià)、促銷(xiāo)、有貨了等事件發(fā)生時(shí),就會(huì)發(fā)Email通知顧客。

        
    UML圖如下:
        

        ItemObserver的代碼如下:
        

    public interface ItemObserver {
        
    void
     sendNotification(String message);
    }

        Customer代碼如下:
        
    public class Customer implements ItemObserver {
        
    private
     String username;
        
    private
     String email;
        
    private
     String mobile;

        
    public Customer(String name) throws IllegalArgumentException 
    {
            
    if (name == null || "".equals(name)) 
    {
                
    throw new IllegalArgumentException("username cannot be empty!"
    );
            }

            
    this.username = name;
        }


        @Override
        
    public void sendNotification(String message) {
            
    if (email != null && !"".equals(email.trim())) 
    {
                System.out.println(
    "Send Email to " +
     username);
                System.out.println(message);
            }


            
    if (mobile != null && !"".equals(mobile.trim())) {
                System.out.println(
    "Send SMS to " +
     username);
                System.out.println(message);
            }

        }


        
    public String getUsername() {
            
    return
     username;
        }


        
    public void setUsername(String username) {
            
    this.username =
     username;
        }


        
    public String getEmail() {
            
    return
     email;
        }


        
    public void setEmail(String email) {
            
    this.email =
     email;
        }


        
    public String getMobile() {
            
    return
     mobile;
        }


        
    public void setMobile(String mobile) {
            
    this.mobile =
     mobile;
        }


        @Override
        
    public boolean equals(Object obj) {
            
    if (obj == null
    )
                
    return false
    ;
            
    if (obj instanceof Customer) 
    {
                Customer customer 
    =
     (Customer) obj;
                
    return
     customer.getUsername().equals(username);
            }
     else {
                
    return false
    ;
            }

        }


    }

        ItemObservable代碼如下:
        
    public interface ItemObservable {
        
    void
     registerItemObserver(ItemObserver itemObserver);

        
    void
     removeItemObserver(ItemObserver itemObserver);

        
    void
     notifyObserver(String message);
    }

        Item代碼如下:
        
    public class Item implements ItemObservable {

        
    private
     String             name;
        
    private double
                 price;

        
    private List<ItemObserver> itemObservers = new ArrayList<ItemObserver>
    ();

        
    public Item(String name, double price) 
    {
            
    this.name =
     name;
            
    this.price =
     price;
        }


        @Override
        
    public void registerItemObserver(ItemObserver itemObserver) {
            itemObservers.add(itemObserver);
        }


        @Override
        
    public void removeItemObserver(ItemObserver itemObserver) {
            itemObservers.remove(itemObserver);
        }


        @Override
        
    public void notifyObserver(String message) {
            
    for (ItemObserver observer : itemObservers) 
    {
                observer.sendNotification(message);
            }

        }


        
    public void changePrice(double changedPrice) {
            price 
    +=
     changedPrice;
            
    if (changedPrice < 0
    {
                notifyObserver(name 
    + " 降價(jià)了!"
    );
            }

        }

        另外:Java的util包提供了Observer接口和Observable接口支持這個(gè)模式。
    posted on 2011-04-07 22:29 simon.shen 閱讀(337) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): 設(shè)計(jì)模式

    Feedback

    # re: 觀察者模式 2011-04-08 09:25 晴天
    感覺(jué)例子不是特別好~~  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
    相關(guān)文章:
     
    主站蜘蛛池模板: 老司机亚洲精品影院在线观看| av无码免费一区二区三区| 日本xxwwxxww在线视频免费| 99人中文字幕亚洲区| 亚洲国产三级在线观看| 日韩在线观看视频免费| 高清在线亚洲精品国产二区| 国产午夜亚洲精品不卡免下载| 青青草国产免费久久久91| 最新国产AV无码专区亚洲| 国产99久久久国产精免费| 亚洲狠狠爱综合影院婷婷| 人妻免费久久久久久久了| 久久久久亚洲av毛片大| 中文在线免费观看| 久久亚洲一区二区| 毛片免费全部播放无码| 亚洲最大福利视频| 国产高清在线免费视频| 一级毛片试看60分钟免费播放| 国产h视频在线观看网站免费| 亚洲天堂一区二区三区四区| 青春禁区视频在线观看直播免费| 亚洲熟女精品中文字幕| 男人的天堂亚洲一区二区三区| 亚洲日本一线产区和二线产区对比| 精品久久久久久久免费人妻| 人人爽人人爽人人片A免费 | 中国亚洲呦女专区| 国产美女精品视频免费观看| 九九热久久免费视频| 亚洲精品美女久久久久9999| 韩国18福利视频免费观看| 一区二区在线免费视频| 亚洲精彩视频在线观看| 麻豆国产入口在线观看免费| 成人妇女免费播放久久久| 亚洲国产精品张柏芝在线观看 | **真实毛片免费观看| 18禁亚洲深夜福利人口| 亚洲精品成人片在线观看精品字幕|