Android 进阶-设计模式-观察者模式

观察者定义 :定义对象间一种一对多的依赖关系,使得每一个对象改变状态,则所有依赖于它的对象都会得到通知将被自动更新。
创建观察者
package com.amn.amn.ndk_02.design_patterns;
/**
 * 观察者:定义了一个update()方法,当被观察者调用notifyObservers()方法时,观察者的update()方法会被回调。
 */
public interface Observer {
    public void update(T t);
}

创建被观察者
package com.amn.amn.ndk_02.design_patterns;

/**
 * 被观察者 :声明了添加、删除、通知观察者方法
 */
public interface Observerable {
    public void registerObserver(Observer o);

    public void removeObserver(Observer o);

    public void notifyObserver();
}

创建观察者实现类
package com.amn.amn.ndk_02.design_patterns;

import android.util.Log;

public class ObserverImpl01 implements Observer {

    @Override
    public void update(T o) {
        Log.i("TAG","ObserverImpl01>>"+ o);
    }
}


package com.amn.amn.ndk_02.design_patterns;

import android.util.Log;

public class ObserverImpl02 implements Observer {

    @Override
    public void update(T o) {
        Log.i("TAG","ObserverImpl02>>"+ o);
    }
}

创建被观察者实现类
package com.amn.amn.ndk_02.design_patterns;

import java.util.ArrayList;
import java.util.List;
import java.util.PropertyResourceBundle;

public class ObserverableImpl implements Observerable {


    private List observerList;

    private T t;

    public  ObserverableImpl(){
        observerList=new ArrayList<>();
    }


    /**
     * 注册/添加观察者
     */
    public void registerObserver(Observer observer){
        observerList.add(observer);
    }

    /**
     * 注销被观察者
     */
    public void removeObserver(Observer observer){
        observerList.remove(observer);
    }


    /**
     * 通知观察者更新数据
     */
    public void notifyObserver(){
        for (Observer observer :observerList){
            observer.update(t);
        }
    }

   public void setInfomation(T t){
        this.t=t;
       notifyObserver();
   }

}
使用
        ObserverableImpl observerable = new ObserverableImpl<>();
        observerable.registerObserver(new ObserverImpl01());
        observerable.registerObserver(new ObserverImpl02());
        observerable.setInfomation("java 是世界上最好的语言");



2019-11-08 11:11:45.211 16509-16509/com.amn.amn.ndk_02 I/TAG: ObserverImpl01>>java 是世界上最好的语言
2019-11-08 11:11:45.211 16509-16509/com.amn.amn.ndk_02 I/TAG: ObserverImpl02>>java 是世界上最好的语言
 

                            
                        
                    
                    
                    

你可能感兴趣的:(Android 进阶-设计模式-观察者模式)