该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
观察者模式定义?
当一个对象状态发生改变,所有依赖于他订阅者都会发生改变(收到状态改变的通知)。
2、观察者模式-应用场景?
场景一:关联场景
场景二:事件多级触发
场景三:跨系统消息交互场景
3、观察者模式-角色划分?
四个角色?
角色一:被观察者(目标对象->抽象)
角色二:具体被观察者(目标对象)
角色三:观察者
角色四:具体观察者
代码示例:
被观察者接口:
public interface SubjectObservable {
//注册观察者
public void addObserver(MyObserva o);
//取消观察者
public void cancelObserver(MyObserva o);
//取消所有观察者
public void cancelAllObservers();
//获得所有观察者数量
public int countObservers();
//发送通知
public void notifyObservers(String msg);
}
被观察者抽象类:
public class MyObservable implements SubjectObservable {
public ArrayList obs = new ArrayList();
//注册观察者
@Override
public void addObserver(MyObserva o){
obs.add(o);
}
//取消观察者
@Override
public void cancelObserver(MyObserva o) {
if (obs.indexOf(o) >= 0)
{
obs.remove(o);
}
// obs.remove(o);
}
//取消所有观察者
@Override
public void cancelAllObservers() {
obs.clear();
}
//获得所有观察者数量
@Override
public int countObservers() {
return obs.size();
}
//发送通知
@Override
public void notifyObservers(String msg) {
for (MyObserva o:obs
) {
o.updata(this,msg);
}
}
}
观察者接口:
public interface MyObserva {
public void updata(MyObservable myObservable,String s);
}
具体观察者1:
public class SpecificObserver1 implements MyObserva{
@Override
public void updata(MyObservable myObservable, String s) {
}
}
具体观察者2:
publicclassSpecificObserver2implementsMyObserva{
@Override
publicvoidupdata(MyObservable myObservable, String s) {
}
}
测试类:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
demo1();
}
public void demo1(){
MyObservable obs = new MyObservable();
SpecificObserver1 sp1 = new SpecificObserver1();
SpecificObserver2 sp2 = new SpecificObserver2();
obs.addObserver(sp1);
obs.addObserver(sp2);
obs.notifyObservers("发送通知");
}
}