一、模拟AWT事件处理          
回顾一下JDK里面按下一个Button,有件事发生,这个东西怎么写:
package com.cy.dp.observer.awt;

import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class TestFrame extends Frame{ public void launch(){
Button b = new Button("press me");
b.addActionListener(new MyActionListener());
b.addActionListener(new MyActionListener2());
this.add(b);
this.pack(); this.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}); this.setVisible(true);
} public static void main(String[] args) {
new TestFrame().launch();
} private class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button pressed!");
}
} private class MyActionListener2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button pressed 2!");
}
}
}

二、自己手写模拟AWT事件处理        

代码:

package com.cy.dp.observer.awt;

import java.util.ArrayList;
import java.util.List; public class Test {
public static void main(String[] args) {
Button b = new Button();
b.addActionListener(new MyActionListener());
b.addActionListener(new MyActionListener2());
b.buttonPressed();
}
} class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button pressed, time:"+e.getWhen()+", source:"+e.getSource());
}
}
class MyActionListener2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("button pressed 2, time:"+e.getWhen()+", source:"+e.getSource());
}
} /********************************对于使用java.awt包,下面代码就不可见了****************************************/
/**
* 自己模拟的Button
*/
class Button{
private List<ActionListener> listeners = new ArrayList<ActionListener>(); public void addActionListener(ActionListener l){
this.listeners.add(l);
} //模拟button被按下
public void buttonPressed() {
ActionEvent e = new ActionEvent(this, System.currentTimeMillis());
for(ActionListener listener : listeners){
listener.actionPerformed(e);
}
} } interface ActionListener{
public void actionPerformed(ActionEvent e);
} /**
* 自己模拟的事件
*/
class ActionEvent{
private long when;
private Object source; public ActionEvent(Object source, long when){
this.source = source;
this.when = when;
} public long getWhen(){
return when;
}
public Object getSource(){
return source;
}
}

console:

button pressed, time:1529588100490, source:com.cy.dp.observer.awt.Button@2a139a55
button pressed 2, time:1529588100490, source:com.cy.dp.observer.awt.Button@2a139a55

java设计模式-Observer(2)的更多相关文章

  1. Java 设计模式 – Observer 观察者模式

    目录 [隐藏] 1 代码 1.1 观察者接口: 1.2 被观察者: 1.3 观众类 : 1.4 电影类: 1.5 效果如下: 代码 说明都在注释: 观察者接口: package ObserverMod ...

  2. Java设计模式——Observer(观察者)模式

    在多个对象之间建立一对多的关系,以便当一个对象状态改变的时候.其它全部依赖于这个对象的对象都能得到通知,并被自己主动更新. 适用情况: 当一个抽象模型有两个方面,当中一个方面依赖于还有一方面. 将这二 ...

  3. Java 设计模式实现 不错的引用

    这段时间有兴趣重新温习一下设计模式在Java中的实现,碰巧看到一个不错的设计模式总结,这里引用一下作为参考. 创建型模式: JAVA设计模式-Singleton JAVA设计模式-Factory JA ...

  4. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  5. Java设计模式(20)观察者模式(Observer模式)

    Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...

  6. Java 设计模式系列(十五)观察者模式(Observer)

    Java 设计模式系列(十五)观察者模式(Observer) Java 设计模式系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Java ...

  7. java设计模式解析(1) Observer观察者模式

      设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析( ...

  8. Java设计模式(17)——行为模式之观察者模式(Observer)

    一.概述 概念 UML简图 我们根据一个示例得类图来分析角色 角色 抽象主题:保存观察者聚集(集合),管理(增删)观察者 抽象观察者:定义具体观察者的抽象接口,在得到主题通知后更新自己 具体主题:将有 ...

  9. 《JAVA设计模式》之观察者模式(Observer)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述观察者(Observer)模式的: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Mo ...

随机推荐

  1. textarea去掉右下三角号

    /*去掉textarea右下角三角符号*/ resize : none; 修改样式直接覆盖就行,会把默认样式覆盖掉.如border,width,height,border-radius

  2. Web四则混合运算

    一.代码1: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...

  3. 二分法检索(binary search)(又名二进制搜索)

    定义: 二分法检索的基本思想是设字典中的元素从小到大有序地存放在数组(array)中.首先将给定值key与字典中间位置上元素的关键码(key)比较,如果相等,则检索成功:否则,若key小,则在字典前半 ...

  4. Linux 进程管理 笔记

    https://www.ibm.com/developerworks/cn/linux/l-linux-process-management/index.htmlLinux 进程管理剖析 进程可以是短 ...

  5. EasyUI datagrid 选择单元格 出现文本框 修改 四

    @disabled = "disabled", 只读属性 数据初始化 public JsonResult RateList(string dispatch_number, stri ...

  6. 浅谈log4j-5-读取properties文件(转自godtrue)

    #### 在代码中配置log4j环境的方式,我们已经见识过了,是不是感觉比较麻烦,我们试试使用配置文件的方式是否使您的应用程序更加的灵活.# Log4j支持两种配置文件格式,一种是XML格式的文件,一 ...

  7. Spring 注解bean默认名称规则

    在使用@Component.@Repository.@Service.@Controller等注解创建bean时,如果不指定bean名称,bean名称的默认规则是类名的首字母小写,如SysConfig ...

  8. root用户登录mysql后新建用户提示1045错误

    执行以下命令查看root权限 show grants for 'root'@'localhost'; 如果没有显示with grant option,说明是root没有拥有新建授权用户的权限(为什么会 ...

  9. centos7.0之vsftpd随笔

    yum install vsftpd -f安装vsftpd软件 systemctl start vsftpd 默认ftp目录为/var/ftp/,该文件夹下有pub文件夹 iptables -F 防火 ...

  10. nginx与Apache的优缺点

    来源:http://itindex.net/detail/46414-apache-nginx 1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资 ...