关键字: 公交卡刷卡机 listener模式 观察者模式 例子
以下是一个Listener模式(观察者模式)的例子,自己写的一个打卡机的模拟监听器
任何模式都是从现实世界抽像总结出来的,程序要做的,就是把这些抽象出来的应用到具体的环境中。
个人认为这样的模式例子,很有用,于是总结了下下,,,,
// ----------------------模拟公交车上的打卡机打卡-------------CardMachine.java
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class CardMachine {
// 一组可扩展的监听接口
private List<EventPunchCardListener> listener = new ArrayList<EventPunchCardListener>();
// 添加监听接口
public void addPunchListener(EventPunchCardListener clickOnListener) {
this.listener.add(clickOnListener);
}
public void punchCard() {
for (EventPunchCardListener punch : listener) {
EventPunchCard eventPunch = new EventPunchCard(new Date(), this);
punch.performPunch(eventPunch);
}
}
public static void main(String[] args) {
CardMachine machine = new CardMachine();
Screen screen = new Screen();
Speaker speaker = new Speaker();
machine.addPunchListener(screen);
machine.addPunchListener(speaker);
machine.punchCard();
}
}
//---------------------------定义打卡这个事件-----------------------EventPunchCard.java
import java.util.Date;
public class EventPunchCard {
private Object person; // 事件的来源,表示事件是由XX触发的
private Date time; // 记录事件发生的时间
public EventPunchCard(Date time, Object person) {
this.person = person;
this.time = time;
}
public Object getSource() {
return person;
}
public void setSource(Object person) {
this.person = person;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
}
// ----------------------------展现状态的接口-----------------------EventPunchCardListener.java
public interface EventPunchCardListener {
public void performPunch(EventPunchCard punch);
}
// ----------------------------------展现的一个状态实现:显示--------------------------Screen.java
public class Screen implements EventPunchCardListener {
public void performPunch(EventPunchCard punch) {
System.out.print(punch.getTime() + " ");
System.out.println("您的余额为XX !");
}
}
// ------------------------------展现的一个状态实现:声音------------------------------Speaker.java
public class Speaker implements EventPunchCardListener {
public void performPunch(EventPunchCard punch) {
System.out.print(punch.getTime());
java.awt.Toolkit.getDefaultToolkit().beep();
}
}
// 以上程序测试通过,统一粘贴到一个包里就可以执行了
分享到:
相关推荐
观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种...此外,Spring框架中的`ApplicationEventPublisher`和`ApplicationListener`接口也是实现观察者模式的一个常见选择,它们在企业级应用中广泛使用。
观察者模式是一种行为设计模式,它允许我们定义订阅机制,当对象的状态发生改变时,所有依赖于该状态的...此外,Java和.NET等现代编程语言提供了内置的事件和委托机制,简化了观察者模式的实现,但基本思想仍然相同。
而Spring框架中的`ApplicationEvent`和`ApplicationListener`也是观察者模式的应用,用于应用级别的事件监听。 标签中的"源码"暗示我们可以深入研究上述代码实现的细节,了解其内部工作原理。而"工具"可能指的是...
在Java8中实现观察者模式时,线程安全是一个不可忽视的重要方面,特别是在多线程环境中。观察者模式的核心在于维护一个观察者列表,并在被观察对象的状态发生变化时通知这些观察者。线程不安全的实现可能导致数据...
在Java中,观察者模式得到了很好的支持,特别是通过`java.beans`包中的类和接口来实现。这个模式的核心概念是一个主题(Subject)对象和一个或多个观察者(Observer)对象之间的关系,主题可以被多个观察者监视,当...
除了Java标准库中的实现,许多其他编程语言和框架也提供了内置的观察者支持,如JavaScript的EventEmitter、C#的Event和委托、或者在Spring框架中的ApplicationEvent和ApplicationListener。 在实际项目中,观察者...
除了Java标准库中的实现,观察者模式也被广泛用于其他Java类库中,例如在Servlet技术中,监听器(Listener)就是观察者模式的一个实际应用。此外,现代的Java框架,如Spring框架,提供了更为强大和灵活的事件监听...
7. **观察者模式**:Java EE中的事件驱动架构常常使用观察者模式,如JSF中的Managed Bean和Value Change Listener,以及EJB的Asynchronous方法调用。 8. **职责链模式**:在请求处理过程中,职责链模式允许将多个...
在Java中,观察者模式通常通过`java.util.Observable`类和`java.util.Observer`接口来实现。`Observable`类代表被观察的对象,它可以有多个观察者;`Observer`接口则是观察者的角色,它定义了当被观察对象状态改变时...
在实际应用中,监听器经常与其他设计模式结合使用,如观察者模式(Observer),提供更灵活的事件处理方式。通过熟练掌握Java监听器机制,开发者可以创建更加响应用户输入的、交互性强的应用程序。 在提供的压缩包...
Java事件模型主要基于观察者模式,其中事件源(通常是组件,如按钮、文本框等)是被观察的对象,而事件监听器则是观察者,负责处理由事件源触发的事件。Java AWT和Swing库提供了丰富的组件和事件类来支持这一机制。 ...
Observer模式的核心概念是"发布-订阅"(Publish-Subscribe)或"监听器"(Listener)模式。它包括两个主要角色:主题(Subject)和观察者(Observer)。主题是被观察的对象,它可以有多个观察者。观察者则订阅主题,...
在AWT中,EventListener接口及其子接口(如ActionListener)就是观察者的实现。 3. **定义具体主题(ConcreteSubject)**:实现了Subject接口的具体类,存储观察者,并在状态变化时调用`notifyObservers()`。 4. *...
这种机制基于Java的观察者模式(Observer Pattern),使得松耦合的系统设计成为可能。下面我们将深入探讨Spring事件处理的相关知识点。 首先,Spring事件是通过`ApplicationEvent`类来表示的。这是一个抽象基类,...
这个例子展示了如何在Java中通过观察者模式自定义实现事件。在实际项目中,可能会有更复杂的需求,如多线程处理事件、异步事件等,但基本思路是相似的。通过这种方式,我们可以实现类似于C#中事件的机制,使代码更加...
7. 观察者模式:JUnit与监听器(Listener)的交互体现了观察者模式。监听器可以注册到测试运行器上,当测试开始、结束或者出现错误时,监听器会收到通知并执行相应的回调方法。 8. 代理模式:JUnit的`Rule`机制可以...
10. **设计模式**:在大型项目中,设计模式如工厂模式、单例模式或观察者模式可能会被用来提高代码的可维护性和可扩展性。 总的来说,这个Java编写的象棋游戏是一个学习和实践面向对象编程、GUI设计、事件处理和...
11. **设计模式**:经典的23种设计模式可能在源码中得到体现,如单例、工厂、观察者等,学习这些模式有助于提高代码质量。 12. **测试**:JUnit或TestNG可能用于单元测试,源码中会有测试类,展示如何编写和执行...
11. **设计模式**: 书中可能通过实例展示了单例、工厂、观察者、装饰器、代理等常见设计模式的应用。 12. **Java EE相关**: 如果包含Web应用部分,可能涵盖Servlet、JSP、Filter、Listener等技术。 13. **Java 8新...