1、什么叫观察者模式
例子说明: 假如你喜欢一个超级美女, 别人也喜欢嘛,因为是 超级 美女喽,于是大家都心里有小算盘,都在看着美女,美女喜欢打球的男生,于是你们都是练球, 美女要是喜欢会唱歌的男生,于是你们都去学歌,是吧!男人都不是好鸟。。。。
我们把它抽象化一下,对象间有着一种一对多的关系, 也就是一个美女对于很多男生,它们之间在依赖的关系, 男生依赖着美女,美女喜欢什么,男生就就学什么。 这就是美女喜欢什么,依赖它的男生就会更新自己的泡妹技能
2、代码说明:
import java.util.Vector;
public abstract class Gril { // 这个类,是让具体的美女去继承
private Vector<Man> mans = new Vector<Man>();
public void addMan(Man man) {
BadBoy boy = (BadBoy)man;
System.out.println("有人在观察 我 , 他的名字: " + boy.getName());
this.mans.add(man);
}
public void deleMan(Man man) {
this.mans.remove(man);
}
protected void notifyMans() { //去通知男生,我喜欢什么,你们就必须依赖我,去学习,不然你 没机会
for (Man man : mans) {
man.update();
}
}
public abstract void ILikeDoSomething(); //让具体的女生去实现
}
//这是男生必须实现的接口,说白了,你要是喜欢它,就必须做出变化
public interface Man {
public void update();
}
// 具体的男生 , 我叫它坏男生
public class BadBoy implements Man {
public String name;
public String getName() {
return name;
}
public BadBoy(String name) {
this.name = name;
}
@Override
public void update() {
System.out.println("我是坏男生 " + this.name + ", 我又要学习新的技能了...");
}
}
//这是美女喽, 傲娇!
public class WellGril extends Gril {
@Override
public void ILikeDoSomething() {
System.out.println("我喜欢会唱歌的男生");
this.notifyMans();
}
}
//测试
public class test {
/**
* @param args
*/
public static void main(String[] args) {
Gril wellGril = new WellGril(); //美女出来啦
BadBoy ming = new BadBoy("小明"); //坏男生小明出来啦
wellGril.addMan(ming); // 向美女的男生库中添加 , 意思就是加入追美女的阵营
BadBoy wang = new BadBoy("小王"); //坏男生小王出来啦
wellGril.addMan(wang); //加入追美女的阵营
wellGril.ILikeDoSomething(); //我们傲娇的美女,要喜欢会唱歌的男生
}
}