首页 > 编程语言 > 详细

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

时间:2016-11-23 00:11:53      阅读:330      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!