您的位置:首页 > 其它

观察者模式

2015-06-01 10:13 218 查看
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: 大心脏啊

球迷:  漂亮, 阿联!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  观察者模式