Java 模拟Awt Button Observer模式

一、概述

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 }

三、运行结果

时间: 2024-10-29 00:42:29

Java 模拟Awt Button Observer模式的相关文章

用java.util.Observable实现Observer模式

本文转载自:dada360778512的博客 原文链接:http://blog.csdn.net/dada360778512/article/details/6977758 Observer模式  主要是观察者与被观察者之间的关系 观察者为羊,被观察者为狼  模仿的场景为狼叫羊跑 代码如下: 1.被观察者类 [java] view plaincopy package test.pattern.observer; import java.util.Observable; public class 

Java 模拟 Comparator接口 策略模式

续上一篇  <Java 模拟 Comparable接口> 一.Teacher类及Student类的比较大小方式是不固定的,比如老师除了比较职称外,还可比较工龄大小,年龄大小等.则定义Comparator接口,不同比较方法去定义为一个xxComparator类,去实现Comparator接口,Teacher类及Student类引用具体的xxComparator比较器,则可实现灵活的比较方式切换.此则为策略模式的一个例子:当我要比较大小的时候,先定义一个比较器Comparator,但具体的比较由具

Java 实现观察者(Observer)模式

1. Java自带的实现 类图 /** * 观察目标 继承自 java.util.Observable * @author stone * */ public class UpdateObservable extends Observable { private int data; public UpdateObservable(Observer observer) { addObserver(observer); /* * add other observer */ } public int

Observer 模式及JAVA内置的observer示例

关于观察者模式 假设今天您设计一个图形分析算表程序,当中有一个资料物件,您可以用表格图形物件.柱状图形物件.圆饼图形物件等方式来 呈现物件,无论您是用哪种图形物件,重点是若资料物件的内容作了更改,则图形物件的内容也必须跟着修改,或许您的程式中有两个以上的图形物件来呈现资料,您在图形物件上更动资料,则另一个图形物 件也必须作出相对应的变化. 主题 资料物件 观察者 柱状图形 表格图形 圆饼图形 又假设您今天设计一个网络游戏,您在服务器上维护一个连线客户端共享的资料物件,当其中一个客户端作了操作,将

Java:应用Observer接口实践Observer模式

在Java中通过Observable类和Observer接口实现了观察者模式.Observer对象是观察者,Observable对象是被观察者. 1. 实现观察者模式 实现观察者模式非常简单, [1]创建被观察者类,它继承自java.util.Observable类: [2]创建观察者类,它实现java.util.Observer接口: [3]对于被观察者类, 添加它的观察者: void addObserver(Observer o) addObserver()方法把观察者对象添加到观察者对象列

java设计模式2-观察者模式

什么是观察者模式? 何谓观察者模式?观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新. 在这里,发生改变的对象称之为观察目标,而被通知的对象称之为观察者.一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以么可以根据需要增加和删除观察者,使得系统更易于扩展. 观察者模式又称为发布-订阅模式 观察者模式的优点? 1,很好的解决了一对多的依赖关系中的藕合问题,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自

Observer模式详解--设计模式(15)

Observer模式来源: Observer模式应该可以说是应用最多.影响最广的模式之一. 因为Observer的一个实例Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦.在MFC中,Doc/View(文档视图结构)提供了实现MVC的框架结构(有一个从设计模式(Observer模式)的角度分析分析Doc/View的文章正在进一步的撰写当中,遗憾的是时间:)).在Java阵容中,Struts则提供和MFC中Doc/Vi

C++实现Behavioral - Observer模式 (转)

转http://patmusing.blog.163.com/blog/static/13583496020101501923571/ 也称为Dependents或Publish-Subscribe模式. 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新. “Define a one-to-many dependency between objects so that when one object changes state, all i

Observer模式

观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实作事件处理系统. 抽象目标类别 此抽象类别提供一个接口让观察者进行添附与解附作业.此类别内有个不公开的观察者串炼,并透过下列函数(方法)进行作业: 添附(Attach):新增观察者到链表中,以追踪目标对象的变化. 解附(Detach):将已经存在的观察者从串炼中移除. 通知(Not