一、概述
  Java 的Awt是 Observer模式,现用Java自己模拟awt中Button的运行机制
  二、代码
  1.Test.java
1 import java.text.DateFormat;
2 import java.text.SimpleDateFormat;
3 import java.util.ArrayList;
4 import java.util.Date;
5 import java.util.List;
6
7 public class Test {
8
9     public static void main(String[] args) {
10         Button b = new Button();
11         b.addActionListener(new MyActionListener1());
12         b.addActionListener(new MyActionListener2());
13         b.buttonPress();
14     }
15 }
16
17 class Button {
18
19     //用List存放Listener
20     private List<ActionListener> actionListeners = new ArrayList<ActionListener>();
21
22     public void addActionListener(ActionListener l) {
23         actionListeners.add(l);
24     }
25
26     public void buttonPress(){
27         ActionEvent e = new ActionEvent(System.currentTimeMillis(), this);
28         for (ActionListener l : actionListeners) {
29             l.actionPerformed(e);
30         }
31     }
32 }
33
34 interface ActionListener {
35     public void actionPerformed(ActionEvent e);
36 }
37
38 class MyActionListener1 implements ActionListener {
39
40     @Override
41     public void actionPerformed(ActionEvent e) {
42         System.out.println("MyActionListener1");
43         System.out.println("事件发生时间:"+e.getTime()+" 事件源:"+e.getSource());
44     }
45
46 }
47
48 class MyActionListener2 implements ActionListener {
49
50     @Override
51     public void actionPerformed(ActionEvent e) {
52         System.out.println("MyActionListener2");
53         System.out.println("事件发生时间:"+e.getTime()+" 事件源:"+e.getSource());
54
55     }
56
57 }
58
59 class ActionEvent {
60
61     private long time;
62     private Object source;
63
64     public ActionEvent(long time, Object source) {
65         this.time = time;
66         this.source = source;
67     }
68
69     public Object getSource() {
70         return source;
71     }
72
73     public String getTime() {
74 //        DateFormat df = new SimpleDateFormat("dd:MM:yy:HH:mm:ss");
75         DateFormat df = new SimpleDateFormat("yyyy:MM:dd---HH:mm:ss");
76         return df.format(new Date(time));
77     }
78
79
80 }
  三、运行结果