观察者模式

清疚 2022-08-05 02:23 103阅读 0赞
  1. package 观察者模式;
  2. /*
  3. *
  4. * 观察者模式, 理解就是一个状态的改变, 监视他的人就会给出不同的反应和业务反应。 如此说来,可以确定的一点,
  5. *
  6. * 观察者和被观察者之间会在一个类中,通过接口或者属性的形式在一个类中。 然后做出的反应,最好的也就是一个接口回调,具体的处理交给
  7. *
  8. * 实现的子类来处理。
  9. *
  10. *
  11. * 模拟场景: ----->
  12. *
  13. * 易建联 奥运会精彩比赛。 NBA球探在看, CBA球探在看, 国内球迷在看。 然后三个给出不同的反应。
  14. *
  15. *
  16. * **/
  17. public class Main {
  18. public static void main(String[] args) {
  19. IPlayer player = new YJLPlayer("易建联");
  20. ICrowd nba = new NBAScout();
  21. ICrowd cba = new CBAScout();
  22. ICrowd fan = new Fan();
  23. player.addObserver(nba);
  24. player.addObserver(cba);
  25. player.addObserver(fan);
  26. // 触发事件 --------不同的观察者不同的业务处理。
  27. player.baoKou();
  28. System.out.println("===============================================");
  29. player.shoot();
  30. }
  31. }
  32. package 观察者模式;
  33. import java.util.ArrayList;
  34. // 被观察者
  35. public abstract class IPlayer {
  36. private ArrayList<ICrowd> list = new ArrayList<ICrowd>();
  37. private String name;
  38. public IPlayer(String name){
  39. this.name = name;
  40. }
  41. // 暴扣
  42. public void baoKou(){
  43. System.out.println(this.name + "--->太空易挥起来了");
  44. for(int i = 0; i<list.size(); i++){
  45. list.get(i).dosomethingsByBaokou();
  46. }
  47. }
  48. // 3分
  49. public void shoot(){
  50. System.out.println(this.name + "--->3分绝杀啊");
  51. for(int i = 0; i<list.size(); i++){
  52. list.get(i).dosomethingsByShoot();
  53. }
  54. }
  55. // 添加观察者
  56. public void addObserver(ICrowd crowd){
  57. this.list.add(crowd);
  58. }
  59. }
  60. package 观察者模式;
  61. public class YJLPlayer extends IPlayer {
  62. public YJLPlayer(String name) {
  63. super(name);
  64. }
  65. }
  66. package 观察者模式;
  67. // 观察者反应
  68. public abstract class ICrowd {
  69. public abstract void dosomethingsByBaokou();
  70. public abstract void dosomethingsByShoot();
  71. }
  72. package 观察者模式;
  73. public class NBAScout extends ICrowd {
  74. @Override
  75. public void dosomethingsByBaokou() {
  76. System.out.println("NBA: 身体素质好,可以在来NBA");
  77. }
  78. @Override
  79. public void dosomethingsByShoot() {
  80. System.out.println("NBA: 赶快来NBA签合同啊,签起来");
  81. }
  82. }
  83. package 观察者模式;
  84. public class CBAScout extends ICrowd {
  85. @Override
  86. public void dosomethingsByBaokou() {
  87. System.out.println("CBA: 这身体素质,还是很给力的");
  88. }
  89. @Override
  90. public void dosomethingsByShoot() {
  91. System.out.println("CBA: 大心脏啊");
  92. }
  93. }
  94. package 观察者模式;
  95. public class Fan extends ICrowd {
  96. @Override
  97. public void dosomethingsByBaokou() {
  98. System.out.println("球迷: 牛逼啊, 阿联!");
  99. }
  100. @Override
  101. public void dosomethingsByShoot() {
  102. System.out.println("球迷: 漂亮, 阿联!");
  103. }
  104. }

允许结果:

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

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

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

球迷: 牛逼啊, 阿联!

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

易建联—->3分绝杀啊

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

CBA: 大心脏啊

球迷: 漂亮, 阿联!

发表评论

表情:
评论列表 (有 0 条评论,103人围观)

还没有评论,来说两句吧...

相关阅读

    相关 观察模式

    package 观察者模式; / 观察者模式, 理解就是一个状态的改变, 监视他的人就会给出不同的反应和业务

    相关 观察模式

    观察者模式 Observer   观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。   这个主题对象在状态上发生变化时,会通知所有观察者对

    相关 观察模式

    什么是观察者模式 有人这么说 > 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 > > 这个主题对象在状态上发生变化时,会通知所有观

    相关 观察模式

    场景描述:  一个气象站应用,可以实时获取温度、湿度和气压信息,气象站提供一个封装好的类WeatherData,该类有最新的气象信息,当这些信息发生变动的时候,类中的meas

    相关 观察模式

    观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 观察者模式图: ![输入图片说明][13105107_Mf

    相关 观察模式

    什么是观察者模式? 简单的来说,观察者模式=出版者+订阅者。用比较书面的话来说的话是:定义了对象之间的一对多依赖,当一所对应的对象状态改变时,它的所有依赖者都会收到通知并

    相关 观察模式

    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 意图:定义对象

    相关 观察模式

    对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 介绍 ...