观察者设计模式

观察者设计模式里面主要有两大元素:

观察者和通知者。可能为了扩展还会有观察者的抽象类或者接口。

通知者,保有观察者的引用,里面一般会实现注册观察者和注销观察者的方法,还会有一些notify方法,这些方法里面就会调用观察者的自己实现方法;

观察者,实现自己的接口或者父类就行了。

因为通知者,保有观察者的引用。所以,观察者的对象本身不能改变否则会出现通知不到的情况。

直接上代码:

public interface Observer<T> {
    public void onStateChanged(T info);
    public void onProgressed(T info);
}

public class Notify<T> {

    private List<Observer> mObservers = new LinkedList<Observer>();
    
    public void registerObserver(Observer observer){
        synchronized (mObservers) {
            if(!mObservers.contains(observer)){
                mObservers.add(observer);
            }
        }
    }
    
    public void unRegisterObserver(Observer observer){
        synchronized (mObservers) {
            if(mObservers.contains(observer)){
                mObservers.remove(observer);
            }
        }
    }
    
    public void notifyStateChanged(T info){
        synchronized (mObservers) {
            for (Observer observer:mObservers) {
                observer.onStateChanged(info);
            }
        }
    }
    
    public void notifyProgressed(T info){
        synchronized (mObservers) {
            for (Observer observer:mObservers) {
                observer.onProgressed(info);
            }
        }
    }
}

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Notify<Integer> notify = new Notify<>();
        Observer<Integer> observer1 = new Observer<Integer>() {
            
            @Override
            public void onStateChanged(Integer info) {
            
                System.out.println("observer1:onStateChanged:" + info);
            }
            
            @Override
            public void onProgressed(Integer info) {
            
                System.out.println("observer1:onProgressed:" + info);
            }
        };
        
        
        Observer<Integer> observer2 = new Observer<Integer>() {
            
            @Override
            public void onStateChanged(Integer info) {
                
                System.out.println("observer2:onStateChanged:" + info);
            }
            
            @Override
            public void onProgressed(Integer info) {
                
                System.out.println("observer2:onProgressed:" + info);
            }
        };
        
        
        notify.registerObserver(observer1);
        notify.registerObserver(observer2);
        
        for (int i = 0; i < 10; i++) {
            notify.notifyProgressed(i);
        }
        
    }
    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值