一、概述

Java 的Awt是 Observer模式,现用Java自己模拟awt中Button的运行机制

二、代码

1.Test.java

 import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; public class Test { public static void main(String[] args) {
Button b = new Button();
b.addActionListener(new MyActionListener1());
b.addActionListener(new MyActionListener2());
b.buttonPress();
}
} class Button { //用List存放Listener
private List<ActionListener> actionListeners = new ArrayList<ActionListener>(); public void addActionListener(ActionListener l) {
actionListeners.add(l);
} public void buttonPress(){
ActionEvent e = new ActionEvent(System.currentTimeMillis(), this);
for (ActionListener l : actionListeners) {
l.actionPerformed(e);
}
}
} interface ActionListener {
public void actionPerformed(ActionEvent e);
} class MyActionListener1 implements ActionListener { @Override
public void actionPerformed(ActionEvent e) {
System.out.println("MyActionListener1");
System.out.println("事件发生时间:"+e.getTime()+" 事件源:"+e.getSource());
} } class MyActionListener2 implements ActionListener { @Override
public void actionPerformed(ActionEvent e) {
System.out.println("MyActionListener2");
System.out.println("事件发生时间:"+e.getTime()+" 事件源:"+e.getSource()); } } class ActionEvent { private long time;
private Object source; public ActionEvent(long time, Object source) {
this.time = time;
this.source = source;
} public Object getSource() {
return source;
} public String getTime() {
// DateFormat df = new SimpleDateFormat("dd:MM:yy:HH:mm:ss");
DateFormat df = new SimpleDateFormat("yyyy:MM:dd---HH:mm:ss");
return df.format(new Date(time));
} }

三、运行结果

Java-马士兵设计模式学习笔记-观察者模式-模拟Awt Button的更多相关文章

  1. Java-马士兵设计模式学习笔记-观察者模式-AWT简单例子

    1.AWT简单例子 TestFrame.java import java.awt.Button; import java.awt.Frame; import java.awt.event.Action ...

  2. Java-马士兵设计模式学习笔记-观察者模式-OOD线程

    一.概述 1.情景:孩子睡觉,醒后要吃东西,用java模拟此情况 2.设计:child类,Dad类,都继承Runnable,dad线程监视child线程(缺点:因为要监视,所以耗cup资源) 二.代码 ...

  3. Java-马士兵设计模式学习笔记-观察者模式-读取properties文件改成单例模式

    一.概述 1.目标:读取properties文件改成单例模式 二.代码 1.Test.java class WakenUpEvent{ private long time; private Strin ...

  4. Java-马士兵设计模式学习笔记-观察者模式-OOD 封装Listener

    一.概述 childe类中的是关联监听者dad的,若要再增加监听者,会很不方便,且要修改代码.好的方法是封装监听者类,用addListener()方法动态添加监听者 二.代码 1.Test.java ...

  5. Java-马士兵设计模式学习笔记-观察者模式-OOD 封装event

    把小孩醒来时的具体情况封装成事件类 Test.java class WakenUpEvent{ private long time; private String location; private ...

  6. Java-马士兵设计模式学习笔记-观察者模式-OOD 线程 改进

    1.概述 由于上一个文章<Java OOD 线程>中的线程是父类主动监听childe,比较耗资源,现改进为childe类醒来后主动联系父类 2.代码 Test.java class Chi ...

  7. Java-马士兵设计模式学习笔记-总结

    <马士兵设计模式学习>学习了以下模式: 1.装饰者模式(例子:水管工,木工) 2.策略模式(例子:老师用职称比大小.学生用成绩比大小) 3.简单工厂模式(例子:VechileFactory ...

  8. Java-马士兵设计模式学习笔记-责任链模式-模拟处理Reques Response

    一.目标 1.用Filter模拟处理Request.Response 2.思路细节技巧: (1)Filter的doFilter方法改为doFilter(Request,Resopnse,FilterC ...

  9. Java-马士兵设计模式学习笔记-工厂模式-用Jdom模拟Spring

    一.概述 1.目标:模拟Spring的Ioc 2.用到的知识点:利用jdom的xpath读取xml文件,反射 二.有如下文件: 1.applicationContext.xml <?xml ve ...

随机推荐

  1. Sublime Text 3安装Latex

    Sublime Text 3安装Latex 安装环境 Sublime Text 3已安装Package Control 安装过程 进入官网下载安装MikTex,www.miktex.org 进入官网下 ...

  2. Matlab实现均匀量化

    Matlab实现均匀量化 首先读入一个音频文件的前200个点,如果音频通道大于1则只取一个通道,滤掉其余的 得到音频文件的最大值和最小值,最大值和最小值的差除以2的4次方即16得到量化电平的端点间隔. ...

  3. angular2 国际化实现

    angular2国际化通过管道(pipe)的形式实现下载ng2-translate 如何使用可以参照https://github.com/ocombe/ng2-translate 自己写了一个小DEM ...

  4. Zclip复制页面内容到剪贴板兼容各浏览器

    Zclip:复制页面内容到剪贴板兼容各浏览器 WEB开发中,要让用户复制页面中的一段代码.URL地址等信息,为了避免用户拖动鼠标再进行右键复制操作而可能出现的差错,我们可以直接在页面中放置一个复制按钮 ...

  5. unity3d中的Viewport

    Camera属性中有个Viewport Rect,如下图: X.Y为(0, 0)代表左下角,(1, 1)代表右上角:W和H分别是Viewport的宽(Width)和高(Height),摄像机的Aspe ...

  6. python 循环技巧

    原文地址:http://docs.pythontab.com/python/python3.4/datastructures.html#tut-tuples 在字典中循环时,关键字和对应的值可以使用  ...

  7. Combox 实现百度收索框效果

    标题中所谓百度收缩框效果,就是在输入数据的时候,自动提示,来张图就明白了: 用Combox来实现这个功能只是需要设置三个A开头的属性就OK了:AutoCompleteSource.AutoComple ...

  8. volatile关键字的使用

    (简要概括:volatile变量有两个作用:一个是告诉编译器不要进行优化:另一个是告诉系统始终从内存中取变量的地址,而不是从缓存中取变量的值) 一.前言 1.编译器优化介绍: 由于内存访问速度远不及C ...

  9. Why we have to use epsg:900913 in OpenLayers

    reference:http://docs.openlayers.org/library/spherical_mercator.html epsg:900913 is spicfy the Soher ...

  10. CodeForces 321A

    A. Ciel and Robot time limit per test 1 second memory limit per test 256 megabytes input standard in ...