码迷,mamicode.com
首页 > 编程语言 > 详细

朝花夕拾--观察者模式-java笔记

时间:2016-11-23 00:13:50      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:观察者模式

先看一下类图:



技术分享




具体实现:

package obs.self;

/**
 * 被观察对象
 * @author wangfeihu
 *
 */
public interface Subject {

    /**
     * 增加一个观察者
     * @param observer
     */
    public void addObserver(Observer observer);
    
    public void removeObserver(Observer observer);
    
    /**
     * 通知所有观察者
     * @param msg
     */
    public void notifyObservers(Object msg);
    
}
package obs.self;

/**
 * 观察者
 * @author wangfeihu
 *
 */
public interface Observer {

    public void update(Object msg);
}


package obs.self;

import java.util.HashSet;
import java.util.Set;

/**
 * 银行账户, 余额发生变化的时候进行相关的通知
 * @author wangfeihu
 *
 */
public class Account implements Subject {

    private int balance = 0;

    public Set<Observer> obervers = new HashSet<Observer>();

    public void addObserver(Observer observer) {
        obervers.add(observer);

    }

    public void removeObserver(Observer observer) {
        obervers.remove(observer);

    }

    public void notifyObservers(Object msg) {
        for (Observer obs : obervers) {
            obs.update(msg);
        }

    }

    public int getBalance() {
        return balance;
    }

    public void setBalance(int balance) {
        this.balance = balance;
        this.notifyObservers("账户余额发生改变," + balance);
        
    }

    /**
     * 取款
     * @param money
     */
    public void withdraw(int money) {
        this.setBalance(this.balance - money);
    }

    /**
     * 存款
     * @param money
     */
    public void deposit(int money) {
        this.setBalance(this.balance + money);
    }

}
package obs.self;

public class MobileObserver implements Observer {

    public void update(Object msg) {
        System.out.println("手机短信提醒:" + msg);
    }

}
package obs.self;

public class WechatObserver implements Observer {

    public void update(Object msg) {
        System.out.println("微信服务号提醒:" + msg);
    }

}


执行:


package obs.self;


public class ObserverTest {

    
    
    public static void main(String[] args) {
        Account accountSubject = new Account();
        
        MobileObserver mobileObserver = new MobileObserver();
        WechatObserver wechatObserver = new WechatObserver();
        
        accountSubject.addObserver(mobileObserver);
        accountSubject.addObserver(wechatObserver);
        
        // 存钱
        accountSubject.deposit(10000);
        
        // 取钱
        accountSubject.withdraw(500);
        
        //移除短信通知
        accountSubject.removeObserver(mobileObserver);
        accountSubject.withdraw(600);
    }

}


本文出自 “流浪的脚步” 博客,请务必保留此出处http://now51jq.blog.51cto.com/3474143/1875450

朝花夕拾--观察者模式-java笔记

标签:观察者模式

原文地址:http://now51jq.blog.51cto.com/3474143/1875450

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!