Java-马士兵设计模式学习笔记-观察者模式-模拟Awt Button

一、概述

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 }

 

三、运行结果

posted @ 2015-06-20 11:33  shamgod  阅读(554)  评论(0编辑  收藏  举报
haha