<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 閱讀(337) 評論(1)  編輯  收藏 所屬分類: 設計模式

    Feedback

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


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


    網站導航:
     
    主站蜘蛛池模板: 国产亚洲精品一品区99热| 思思久久99热免费精品6 | 日韩在线视频播放免费视频完整版| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 亚州免费一级毛片| 麻豆国产精品入口免费观看| 亚洲国产成人久久综合野外| 亚洲AV无码码潮喷在线观看| 亚洲女人18毛片水真多| 国产亚洲综合视频| 美丽姑娘免费观看在线观看中文版| 成人性生交大片免费看午夜a| 亚洲av午夜精品一区二区三区| 最新亚洲人成网站在线观看| 无码av免费网站| 亚洲精品无码久久久| 在线综合亚洲中文精品| 三级网站免费观看| 精品国产免费观看久久久| 亚洲Av永久无码精品黑人| 国产精彩免费视频| 亚洲AV本道一区二区三区四区| 国产产在线精品亚洲AAVV| 亚洲一区二区三区无码影院| 亚洲gay片在线gv网站| 无码国产精品一区二区免费虚拟VR| 亚洲av无码一区二区三区天堂古代| 国产一区二区免费视频| 四虎国产精品免费视| 亚洲偷自精品三十六区| 国产hs免费高清在线观看| 国产一级a毛一级a看免费视频| 国产猛烈高潮尖叫视频免费| 亚洲制服丝袜精品久久| 久久久久久国产精品免费免费男同 | 中文在线免费观看| 亚洲欧洲国产综合| 亚洲第一永久AV网站久久精品男人的天堂AV| 久久久久久国产a免费观看不卡| 日韩一级视频免费观看| 国产午夜亚洲精品国产|