观察者模式的优点好处:可以降低代码的耦合度,维护更方便,相对于广播和Intent来说!
观察者模式首先需要知道两个重要的类:Observer类和Observable类,Observable是被观察者类,Observer是观察者类,
他们之前如何实现交互通信传值呢?
package com.myboserver;
import java.util.Observable;
public class Myobseverble extends Observable{
private String name;
private float price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
setChanged();
notifyObservers(name);
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
setChanged();
notifyObservers(price);
}
}
上面是被观察着类,继承Observable类,然后在需要天机数据和数据需要传值的地方调用setchanged方法来启动观察着,并向观察者传值notifyObservers();
//观察着
public class MyobserverB implements Observer{
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void update(Observable observable, Object data) {
<span style="white-space:pre"> </span>if (data instanceof Float) {
<span style="white-space:pre"> </span>float price=((Float) data).floatValue();
<span style="white-space:pre"> </span>Log.i("MyobserverB", "启动的观察者,值为="+price);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}
public class MyboserverA implements Observer{
@Override
public void update(Observable observable, Object data) {
if (data instanceof String) {
Log.i("MyboserverA", "启动的观察者,值为="+data);
}
}
}
上面是观察着类,调用接口Observer类,重写update方法,方法中有两个参数,其中Object可以获取notifyObservers(name);传的值,由于是Objectt类型的,所以需要用instanceof进行类型判断,获取到值之后,随你处置,
package com.myboserver;
//管理观察着模式
public class AddObserver {
private Myobseverble myobseverble;
public void setobserble(Myobseverble myobseverble){
this.myobseverble=myobseverble;
}
public void add(MyboserverA a,MyobserverB b){
myobseverble.addObserver(a);
myobseverble.addObserver(b);
}
public void delete(MyboserverA a){
myobseverble.deleteObserver(a);
}
public void delete(MyobserverB b){
myobseverble.deleteObserver(b);
}
}
上面是观察着模式的管理类,主要是添加观察着和删除观察着,首先调用被观察者类后实例化,然后在add方法中调用addObserver()方法添加观察者,参数为MyboserverA implements ObserverMyobserverB implements Observer删除也是一样的,
最后是调用和使用观察者模式,
package com.myboserver;
public class TextClass {
public static void text(){
Myobseverble myobseverble=new Myobseverble();
MyboserverA a=new MyboserverA();
MyobserverB b=new MyobserverB();
AddObserver addObserver=new AddObserver();
addObserver.setobserble(myobseverble);实例化被观察着
addObserver.add(a, b);添加
myobseverble.setName("玉米");启动观察者
myobseverble.setPrice(3.5f);
}
}
最有打印应该为:
Log.i("MyboserverA", "启动的观察者,值为="+玉米);
Log.i("MyobserverB", "启动的观察者,值为="+3.5);所有代码都在此,
要想向高手进阶设计模式必须要熟练的使用。
本文深入探讨了观察者模式的原理与优点,通过代码示例展示了如何在Java中实现观察者模式,包括被观察者类(Observable)与观察者类(Observer)的设计与交互,以及如何使用管理类(AddObserver)进行观察者的添加与删除。同时,文章演示了如何在实际场景中应用观察者模式,确保代码的高内聚性和低耦合性。
321

被折叠的 条评论
为什么被折叠?



