观察者模式
来源:互联网 发布:淘宝清洗过期了怎么办 编辑:程序博客网 时间: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
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- storm自带例子详解 (四)——ManualDRPC
- 社説 20150601 関電再値上げ 原発再稼働を着実に推進せよ
- 01-复杂度2. Maximum Subsequence Sum (25)
- 3D数学基础及图形与游戏开发的学习 (三)
- How to make changes to wcf service without breaking clients
- 观察者模式
- MFC让按钮控件显示*.ico图标和文字说明
- pb9获得当前程序所在路径及中文字符长度处理
- C++ 9.1 顺序容器-----vector、list、deque
- 两个月面试的经验分享 (2012-04-27 12:16:27)
- 高效使用vim
- 加薪/技术才是最大的开源(为什么要适当远离股票市场?)
- eclipse配置tomcat7
- linux 后台运行,终止