<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人在线播放| 亚洲一区二区三区免费| 亚洲精品欧洲精品| 久久久久成人片免费观看蜜芽| 久久亚洲AV午夜福利精品一区| 国产在线精品免费aaa片| 亚洲AV无码乱码国产麻豆 | 亚洲国产高清精品线久久| 亚洲欧美日韩国产精品一区| 日本大片在线看黄a∨免费| 国产成人久久精品亚洲小说| 四虎永久免费网站免费观看| aa午夜免费剧场| 亚洲av无码乱码国产精品fc2| 日本免费一区二区三区四区五六区| 久久久亚洲裙底偷窥综合| 思思re热免费精品视频66| 久久亚洲中文无码咪咪爱| 亚洲精品国产精品国自产观看 | 国产精品久久久久久亚洲小说 | 亚洲精品美女久久久久9999| 色窝窝免费一区二区三区| 久久亚洲精品无码gv| 亚洲日韩中文在线精品第一| 香蕉成人免费看片视频app下载| 亚洲国产综合在线| 日韩精品成人亚洲专区| 在线人成免费视频69国产| 亚洲免费人成视频观看| 免费在线黄色网址| 久草免费福利视频| 亚洲中文字幕久久精品蜜桃 | 亚洲中文无韩国r级电影| 久久免费精品视频| 亚洲私人无码综合久久网| 国产亚洲?V无码?V男人的天堂| 99久久99热精品免费观看国产| 亚洲一卡2卡三卡4卡无卡下载| 国产精品亚洲精品日韩已方| 91青青国产在线观看免费| 国产亚洲精品成人久久网站|