一、模拟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. SQLI DUMB SERIES-1

    less-1 (1) 可以看到提示输入ID,而且less-1题目也有提到GET,因此试试以下操作: http: 结果: http: 结果: 现在可知,“ ' ”并没有被过滤,因此可以进行以下操作: h ...

  2. C++ Tips

    1. 虚函数不能是内联的 因为“内联”是指“在编译期间用被调用的函数体本身来代替函数调用的指令,”但是虚函数的“虚”是指“直到运行时才能知道要调用的是哪一个函数.”如果编译器在某个函数的调用点不知道具 ...

  3. 《DSP using MATLAB》Problem 7.2

    从别的书上找来的

  4. EnableAutoConfiguration注解的工作原理(org.springframework.boot.autoconfigure.EnableAutoConfiguration=core.bean.MyConfig)

    EnableAutoConfiguration注解的工作原理(org.springframework.boot.autoconfigure.EnableAutoConfiguration=core.b ...

  5. centos7上部署vnc服务器并实现远程桌面

    centos7上进行一下操作 [root@localhost ~]# yum install tigervnc-server -y#安装vnc服务器 Loaded plugins: fastestmi ...

  6. bash scripts收集

    只保留代码中的头文件声明 #! /bin/sh  echo "leave only INCluding declaration in c files"  find $1 -name ...

  7. C++中的类模板

    一.学习笔记 1.类模板的格式(1)声明 template<typename T> /* 使用T表示某种类型,比如: */ class AAA { private: T obj; publ ...

  8. MySQL Replication--全局参数gtid_executed和gtid_purged

    参数定义gtid_executed,全局参数,GTID集合包含所有在该服务器上执行过的事务编号和使用set gtid_purged语句设置过的事务编号,使用SHOW MASTER STATUS和SHO ...

  9. hive GenericUDF1

    和UDF相比,通用GDF(GenericUDF)支持复杂类型(比如List,struct等)的输入和输出. 下面来看一个小示例. Hive中whereme表中包含若干人的行程如下: A       2 ...

  10. python查看及修改当前的工作路径

    在pycharm中使用jupyter的时候,有时候需要查看当前的工作路径,然后需要修改当前的路径. 获取当前工作目录 os.getcwd() #用以获取当前的工作目录 改变当前工作目录 os.chdi ...