<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 晴天
    感覺例子不是特別好~~  回復  更多評論
      


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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 国产免费一级高清淫曰本片| 免费一级毛片在线观看| **一级一级毛片免费观看| 巨波霸乳在线永久免费视频| 黄瓜视频影院在线观看免费| 啦啦啦手机完整免费高清观看| 国产又大又粗又硬又长免费| 久久亚洲国产成人影院网站| 亚洲av伊人久久综合密臀性色| 亚洲欧洲国产精品你懂的| 亚洲国产成人精品无码一区二区| 亚洲AV无码成人精品区狼人影院| 国产精品高清免费网站| 91成人在线免费观看| 日本免费一区尤物| 亚洲色欲一区二区三区在线观看| 亚洲伊人色一综合网| 一级特黄录像视频免费| 精品成在人线AV无码免费看| 免费真实播放国产乱子伦| 亚洲精品高清久久| 国产精品亚洲精品日韩动图| 免费国产黄网站在线观看可以下载 | 在线看片免费不卡人成视频| 亚洲精品无码99在线观看| 亚洲成a人片7777| 精品国产呦系列在线观看免费| 成年人网站免费视频| 亚洲欧洲国产成人综合在线观看| 亚洲欧洲精品国产区| 国产精品内射视频免费| 天天干在线免费视频| 亚洲欧洲国产精品你懂的| 一级毛片不卡免费看老司机| 成年人免费观看视频网站| 亚洲一区二区影院| 9久热精品免费观看视频| 亚洲第一中文字幕| 亚洲精品国产第一综合99久久| 色欲国产麻豆一精品一AV一免费| 免费人成激情视频|