属于行为型模式(共11种)

    事件处理模型

    类图:
    image.png

    observer 本质上是个 钩子函数(可以将方法作为参数传进去) 事件发生了自动执行
    数据源对象 中聚合一个 observer列表 、一个触发事件的方法 (新建事件、具体的事件 传给observer)
    observer接口 中有对事件处理的方法 传入 event事件
    Event事件中 聚合事件源对象 getSource (方便拿到事件源,调用事件源对象本身的方法)
    具体的observer 实现观察者接口 重写其中的事件处理方法

    代码举例:

    1. /**
    2. * 有很多时候,观察者需要根据事件的具体情况来进行处理
    3. * 大多数时候,我们处理事件的时候,需要事件源对象
    4. * 事件也可以形成继承体系
    5. */
    6. //事件源
    7. class Child {
    8. private boolean cry = false;
    9. private List<Observer> observers = new ArrayList<>();
    10. {
    11. observers.add(new Dad());
    12. observers.add(new Mum());
    13. observers.add(new Dog());
    14. observers.add((e)->{
    15. System.out.println("ppp");
    16. });
    17. //hook callback function
    18. }
    19. public boolean isCry() {
    20. return cry;
    21. }
    22. public void wakeUp() {
    23. cry = true;
    24. wakeUpEvent event = new wakeUpEvent(System.currentTimeMillis(), "bed", this);
    25. for(Observer o : observers) {
    26. o.actionOnWakeUp(event);
    27. }
    28. }
    29. }
    30. //事件
    31. abstract class Event<T> {
    32. abstract T getSource();
    33. }
    34. //具体事件
    35. class wakeUpEvent extends Event<Child>{
    36. long timestamp;
    37. String loc;
    38. Child source;
    39. public wakeUpEvent(long timestamp, String loc, Child source) {
    40. this.timestamp = timestamp;
    41. this.loc = loc;
    42. this.source = source;
    43. }
    44. @Override
    45. Child getSource() {
    46. return source;
    47. }
    48. }
    49. //观察者
    50. interface Observer {
    51. void actionOnWakeUp(wakeUpEvent event);
    52. }
    53. //具体观察者
    54. class Dad implements Observer {
    55. public void feed() {
    56. System.out.println("dad feeding...");
    57. }
    58. @Override
    59. public void actionOnWakeUp(wakeUpEvent event) {
    60. feed();
    61. }
    62. }
    63. class Mum implements Observer {
    64. public void hug() {
    65. System.out.println("mum hugging...");
    66. }
    67. @Override
    68. public void actionOnWakeUp(wakeUpEvent event) {
    69. hug();
    70. }
    71. }
    72. class Dog implements Observer {
    73. public void wang() {
    74. System.out.println("dog wang...");
    75. }
    76. @Override
    77. public void actionOnWakeUp(wakeUpEvent event) {
    78. wang();
    79. }
    80. }
    81. //模拟调用
    82. public class Main {
    83. public static void main(String[] args) {
    84. Child c = new Child();
    85. //do sth
    86. c.wakeUp();
    87. }
    88. }

    image.png

    image.png