观察者模式

建一个主题接口,所有主题必须实现此接口

//主题接口
public interface Subject {

    //注册一个观察者
    void registerObserver(Observer observer);

    //移除一个观察者
    void removeObserver(Observer observer);

    //通知一个观察者
    void notifyObservers();
}

观察者接口

//所有的观察者需要实现此接口
public interface Observer {
    public void update(String msg);
}

3D服务号的实现类

//服务号的实现类
public class ObjectFor3D implements Subject {
    private List<Observer> observers = new ArrayList<Observer>();

    //3D彩票的号码 
    private String msg;

    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer); 
    }

    @Override
    public void removeObserver(Observer observer) {
        int index = observers.indexOf(observer);
        if(index >= 0){
            observers.remove(observer);
        }
    }

    @Override
    public void notifyObservers() {
        for(Observer observer:observers){
            observer.update(msg);
        }

    }  

    //主题消息更新
    public void setMsg(String msg){
        this.msg = msg;
        notifyObservers();
    }
}

模拟两个使用者

public class Observer1 implements Observer{

    private Subject subject;
    public Observer1(Subject subject){
        this.subject = subject;
        subject.registerObserver(this);
    }
    @Override
    public void update(String msg) {
        System.out.println("observer1 得到 3D 号码  -->" + msg + ", 我要记下来。"); 
    }

}
public class Observer2 implements Observer{
    private Subject subject;
    public Observer2(Subject subject){
        this.subject = subject;
        subject.registerObserver(this);
    }    
    @Override
    public void update(String msg) {
        System.out.println("observer2 得到 3D 号码  -->" + msg + ", 我要告诉舍友们。"); 
    }
}

测试代码

public class Test {

    public static void main(String[] args) {
        //模拟一个3D的服务号  
        ObjectFor3D subjectFor3d = new ObjectFor3D();  
        //客户1  
        Observer observer1 = new Observer1(subjectFor3d);  
        Observer observer2 = new Observer2(subjectFor3d);  

        subjectFor3d.setMsg("20140420的3D号码是:127" );  
        subjectFor3d.setMsg("20140421的3D号码是:333" );  
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值