介绍
1、首先需要一个被观察者;
2、被观察者需要具备广播通知的能力;
3、其次需要一批观察者;
4、观察者需要具备观察(接受通知)的能力;
具体见代码
被观察者是一个女孩
public class BeautifulGirl {
//我的亲人
private List<Concerner> concerners = new ArrayList<>();
//我是否生病了
private boolean isFallIll = false;
//添加我的亲人
public void addRelatives(Concerner concerner) {
this.concerners.add(concerner);
}
public boolean isFallIll() {
return isFallIll;
}
//生病了
public void setFallIll(Boolean isFallIll) {
this.isFallIll = isFallIll;
if(isFallIll)
this.notifyAllRelatives();
}
//告知我的家人
private void notifyAllRelatives() {
for (Concerner observer : concerners) {
observer.care();
}
}
}
需要具有亲属关系(观察者必须具备的能力)
public abstract class Concerner {
protected BeautifulGirl girl;
@SuppressWarnings("unused")
private Concerner() {}
protected Concerner(BeautifulGirl girl) {
this.girl = girl;
this.girl.addRelatives(this);
System.out.println(this.getClass().getName());
}
//关心方法
public abstract void care();
}
各个观察者如下
public class Boyfriend extends Concerner {
public Boyfriend(BeautifulGirl girl) {
super(girl);
}
@Override
public void care() {
boolean fallIll = this.girl.isFallIll();
if (fallIll)
System.out.println("亲爱的,我生病了");
System.out.println("多喝水呀!宝贝~");
System.out.println("--------------------");
}
}
public class Brother extends Concerner {
public Brother(BeautifulGirl girl) {
super(girl);
}
@Override
public void care() {
boolean fallIll = this.girl.isFallIll();
if (fallIll)
System.out.println("哥哥,我生病了");
System.out.println("要紧么?赶紧去医院看病呀!我先给你转1000块钱过去呀~");
System.out.println("--------------------");
}
}
public class Father extends Concerner {
public Father(BeautifulGirl girl) {
super(girl);
}
@Override
public void care() {
boolean fallIll = this.girl.isFallIll();
if (fallIll)
System.out.println("爸爸,我生病了");
System.out.println("你现在在哪?我马上赶过来!");
System.out.println("--------------------");
}
}
如果女孩生病了,测试一下各个亲属的反应
public class ObserverTest {
public static void main(String[] args) {
BeautifulGirl girl = new BeautifulGirl();//被大家观察的目标
new Boyfriend(girl);
new Brother(girl);
new Father(girl);
girl.setFallIll(true);
}
}
结果可见
![](https://img.haomeiwen.com/i15253776/d73a885d05d87d74.png)
网友评论