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

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

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

    活到老,學到老

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      9 Posts :: 1 Stories :: 2 Comments :: 0 Trackbacks

        概念:觀察者模式定義了一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知并自動更新。

        舉個網上商城的例子,比如很多顧客對某個商品感興趣,把商品收藏,當該商品降價、促銷、有貨了等事件發生時,就會發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 
    + " 降價了!"
    );
            }

        }

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

    Feedback

    # re: 觀察者模式 2011-04-08 09:25 晴天
    感覺例子不是特別好~~  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 好爽好紧好大的免费视频国产 | 久久久久久毛片免费播放| 亚洲午夜AV无码专区在线播放| 亚洲精品无码国产片| 成人毛片免费网站| 国产精品无码亚洲精品2021| 国产男女性潮高清免费网站| 男男黄GAY片免费网站WWW| 又粗又硬免费毛片| sss在线观看免费高清| 亚洲人成无码网站| 亚洲精品免费观看| 91亚洲自偷在线观看国产馆| 在线观看免费人成视频色| 亚洲人AV在线无码影院观看| 免费v片在线观看| 中文字幕免费在线视频| 亚洲AV午夜成人影院老师机影院| 亚洲毛片免费观看| 亚洲AV无码资源在线观看| 俄罗斯极品美女毛片免费播放| 一级毛片a免费播放王色电影 | 四虎国产精品永久免费网址 | 免费高清A级毛片在线播放| 在线观看亚洲精品国产| 特级精品毛片免费观看| 亚洲人成网站免费播放| 亚洲伊人久久综合影院| 99ee6热久久免费精品6| 亚洲一区精彩视频| 亚洲天堂在线视频| 免费国产黄网站在线观看可以下载 | 4455永久在线观免费看| 国产成人精品亚洲一区| 亚洲国产精品国自产拍AV| 久久久久国色AV免费看图片| 搜日本一区二区三区免费高清视频| 久久国产亚洲电影天堂| 日本免费无遮挡吸乳视频电影| a在线观看免费视频| 亚洲最大的成人网站|