观察者模式
2015-06-01 10:13
281 查看
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: 大心脏啊
球迷: 漂亮, 阿联!
相关文章推荐
- C#中观察者模式的3种实现方式
- C#设计模式之观察者模式实例讲解
- jQuery的观察者模式详解
- Android源码学习之观察者模式应用及优点介绍
- php设计模式之观察者模式的应用详解
- Python设计模式之观察者模式实例
- C#中委托和事件在观察者模式中的应用实例
- C++设计模式之观察者模式
- ruby、javascript、php中的观察者模式实现代码
- php中的观察者模式简单实例
- JavaScript设计模式之观察者模式(发布者-订阅者模式)
- C#中利用代理实现观察者设计模式详解
- Java中的观察者模式实例讲解
- Java设计模式之观察者模式(Observer模式)介绍
- Javascript设计模式之观察者模式的多个实现版本实例
- 【JS进阶1】arguments,caller,callee,call,apply概念
- 观察者模式之一
- java设计模式之观察者模式
- 观察者模式
- Head First -- 观察者模式