观察者模式简单样例

测试公交车的打卡机样例:

CardMachine 

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);
	}
	
	/**
	  * 打卡 ing
	  */
	public void punchCard() {
		for (EventPunchCardListener punch : listener) {
			EventPunchCard eventPunch = new EventPunchCard(new Date(), this);
			punch.performPunch(eventPunch);
		}
	}
	
	 /**
	  * 测试打卡机器运转
	  * 
	  * @param args
	  */
	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 

import java.util.Date;

/**
 * 打卡事件<BR>
 * 在什么时间,由XX触发打卡这个操作(事件)
 * 
 * @author JiangWenLei
 * 
 */
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

/**
 * 监听接口:监听打开的一系列状态的接口
 * 
 * @author JiangWenLei
 * 
 */
public interface EventPunchCardListener {
	public void performPunch(EventPunchCard punch);
}

Screen 

/**
 * 打卡机的显示屏<BR>
 * 用于显示打卡后的状态
 * 
 * @author JiangWenLei
 * 
 */
public class Screen implements EventPunchCardListener {
	/**
	 * 显示余额
	 */
	public void performPunch(EventPunchCard punch) {
		System.out.print(punch.getTime() + " ");
		System.out.println("您的余额为51 !");
	}
}

Speaker 

/**
 * 打卡机的扬声器<BR>
 * 用于提醒打卡后的状态
 * 
 * @author JiangWenLei
 * 
 */
public class Speaker implements EventPunchCardListener {
	/**
	 * 声音提醒
	 */
	public void performPunch(EventPunchCard punch) {
		System.out.print(punch.getTime());
		java.awt.Toolkit.getDefaultToolkit().beep();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_36186690/article/details/82952166