Observer 观察者

Observer 观察者

需要事件源对象,事件,观察者。观察源中聚合观察者List,
例如AWT(抽象窗口工具包)中的KeyEvent,事件源对象是窗口,事件是各种keyEvent,自定义观察者对象处理各种事件。

  1. public class Observer {
  2. public static void main(String[] args) {
  3. Child child = new Child();
  4. child.setName("XiaoMing");
  5. Observer1 observer1 = new Observer1();
  6. Observer2 observer2 = new Observer2();
  7. child.observersArrayList.add(observer1);
  8. child.observersArrayList.add(observer2);
  9. child.cri();
  10. }
  11. }
  12. class Child{
  13. String name;
  14. ArrayList<Observers> observersArrayList = new ArrayList<>();
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public void cri(){
  22. EventPart1 eventPart1 = new EventPart1(this,System.currentTimeMillis());
  23. System.out.println("Child is cri");
  24. Iterator<Observers> it = observersArrayList.iterator();
  25. while(it.hasNext()){
  26. it.next().action(eventPart1);
  27. }
  28. }
  29. }
  30. interface Event<T>{
  31. T getSource();
  32. }
  33. class EventPart1 implements Event<Child>{
  34. Child child;
  35. Long timestamp;
  36. @Override
  37. public Child getSource() {
  38. return child;
  39. }
  40. public EventPart1(Child child,Long timestamp){
  41. this.child=child;
  42. this.timestamp=timestamp;
  43. }
  44. }
  45. interface Observers{
  46. void action(EventPart1 eventPart1);
  47. }
  48. class Observer1 implements Observers{
  49. @Override
  50. public void action(EventPart1 eventPart1) {
  51. System.out.println("Observer1,timestamp:"+eventPart1.timestamp+"Child name:"+eventPart1.child.getName());
  52. }
  53. }
  54. class Observer2 implements Observers{
  55. @Override
  56. public void action(EventPart1 eventPart1) {
  57. System.out.println("Observer2,timestamp:"+eventPart1.timestamp+"Child name:"+eventPart1.child.getName());
  58. }
  59. }