观察者模式

来源:互联网 发布:淘宝清洗过期了怎么办 编辑:程序博客网 时间:2024/06/05 15:32
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 {@Overridepublic void dosomethingsByBaokou() {  System.out.println("NBA: 身体素质好,可以在来NBA");        }@Overridepublic void dosomethingsByShoot() { System.out.println("NBA:  赶快来NBA签合同啊,签起来");}}

package 观察者模式;public class CBAScout extends ICrowd {@Overridepublic void dosomethingsByBaokou() { System.out.println("CBA:  这身体素质,还是很给力的");}@Overridepublic void dosomethingsByShoot() { System.out.println("CBA: 大心脏啊");}}

package 观察者模式;public class Fan extends ICrowd {@Overridepublic void dosomethingsByBaokou() {          System.out.println("球迷:  牛逼啊, 阿联!");}@Overridepublic void dosomethingsByShoot() { System.out.println("球迷:  漂亮, 阿联!");}}

允许结果:

易建联--->太空易挥起来了

NBA: 身体素质好,可以在来NBA

CBA:  这身体素质,还是很给力的

球迷:  牛逼啊, 阿联!

===============================================

易建联--->3分绝杀啊

NBA:  赶快来NBA签合同啊,签起来

CBA: 大心脏啊

球迷:  漂亮, 阿联!




0 0