观察者模式
package 观察者模式;
/*
*
* 观察者模式, 理解就是一个状态的改变, 监视他的人就会给出不同的反应和业务反应。 如此说来,可以确定的一点,
*
* 观察者和被观察者之间会在一个类中,通过接口或者属性的形式在一个类中。 然后做出的反应,最好的也就是一个接口回调,具体的处理交给
*
* 实现的子类来处理。
*
*
* 模拟场景: ----->
*
* 易建联 奥运会精彩比赛。 NBA球探在看, CBA球探在看, 国内球迷在看。 然后三个给出不同的反应。
*
*
* **/
public class Main {
public static void main(String[] args) {
IPlayer player = new YJLPlayer("易建联");
ICrowd nba = new NBAScout();
ICrowd cba = new CBAScout();
ICrowd fan = new Fan();
player.addObserver(nba);
player.addObserver(cba);
player.addObserver(fan);
// 触发事件 --------不同的观察者不同的业务处理。
player.baoKou();
System.out.println("===============================================");
player.shoot();
}
}
package 观察者模式;
import java.util.ArrayList;
// 被观察者
public abstract class IPlayer {
private ArrayList<ICrowd> list = new ArrayList<ICrowd>();
private String name;
public IPlayer(String name){
this.name = name;
}
// 暴扣
public void baoKou(){
System.out.println(this.name + "--->太空易挥起来了");
for(int i = 0; i<list.size(); i++){
list.get(i).dosomethingsByBaokou();
}
}
// 3分
public void shoot(){
System.out.println(this.name + "--->3分绝杀啊");
for(int i = 0; i<list.size(); i++){
list.get(i).dosomethingsByShoot();
}
}
// 添加观察者
public void addObserver(ICrowd crowd){
this.list.add(crowd);
}
}
package 观察者模式;
public class YJLPlayer extends IPlayer {
public YJLPlayer(String name) {
super(name);
}
}
package 观察者模式;
// 观察者反应
public abstract class ICrowd {
public abstract void dosomethingsByBaokou();
public abstract void dosomethingsByShoot();
}
package 观察者模式;
public class NBAScout extends ICrowd {
@Override
public void dosomethingsByBaokou() {
System.out.println("NBA: 身体素质好,可以在来NBA");
}
@Override
public void dosomethingsByShoot() {
System.out.println("NBA: 赶快来NBA签合同啊,签起来");
}
}
package 观察者模式;
public class CBAScout extends ICrowd {
@Override
public void dosomethingsByBaokou() {
System.out.println("CBA: 这身体素质,还是很给力的");
}
@Override
public void dosomethingsByShoot() {
System.out.println("CBA: 大心脏啊");
}
}
package 观察者模式;
public class Fan extends ICrowd {
@Override
public void dosomethingsByBaokou() {
System.out.println("球迷: 牛逼啊, 阿联!");
}
@Override
public void dosomethingsByShoot() {
System.out.println("球迷: 漂亮, 阿联!");
}
}
允许结果:
易建联—->太空易挥起来了
NBA: 身体素质好,可以在来NBA
CBA: 这身体素质,还是很给力的
球迷: 牛逼啊, 阿联!
===============================================
易建联—->3分绝杀啊
NBA: 赶快来NBA签合同啊,签起来
CBA: 大心脏啊
球迷: 漂亮, 阿联!
还没有评论,来说两句吧...