package com.think.in.java.design.pattern.lesson27;
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : EventObserver.java
// @ Date : 2016/9/1
// @ Author :
//
//
public interface EventObserver {
public void onEvent(Event e);
}
import java.util.LinkedList;
import java.util.List;
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : EventEmitter.java
// @ Date : 2016/9/1
// @ Author :
//
//
public abstract class EventEmitter {
private List<EventObserver> observers;
public EventEmitter() {
observers = new LinkedList<>();
}
public EventEmitter(EventObserver observer) {
this();
registerObserver(observer);
}
public void registerObserver(EventObserver observer) {
observers.add(observer);
}
protected void notifyObservers(Event event) {
for(EventObserver obs : observers){
obs.onEvent(event);
}
}
public abstract void timePasses(Weekday weekday) ;
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : KingsHand.java
// @ Date : 2016/9/1
// @ Author :
//
//
public class KingsHand extends EventEmitter implements EventObserver {
public KingsHand() {
super();
}
public KingsHand(EventObserver observer) {
super(observer);
}
public void onEvent(Event event) {
notifyObservers(event);
}
@Override
public void timePasses(Weekday weekday) {
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : LordBaelish.java
// @ Date : 2016/9/1
// @ Author :
//
//
public class LordBaelish extends EventEmitter {
public LordBaelish() {
super();
}
public LordBaelish(EventObserver observer) {
super(observer);
}
@Override
public void timePasses(Weekday day) {
if(day.equals(Weekday.FRIDAY)){
notifyObservers(Event.STARK_SIGHTED);
}
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : LordVarys.java
// @ Date : 2016/9/1
// @ Author :
//
//
public class LordVarys extends EventEmitter {
public LordVarys() {
super();
}
public LordVarys(EventObserver observer) {
super(observer);
}
@Override
public void timePasses(Weekday day) {
if(day.equals(Weekday.SATURDAY))
{
notifyObservers(Event.TRAITOR_DETECTED);
}
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : Scout.java
// @ Date : 2016/9/1
// @ Author :
//
//
public class Scout extends EventEmitter {
public Scout() {
super();
}
public Scout(EventObserver observer) {
super(observer);
}
@Override
public void timePasses(Weekday day) {
if(day.equals(Weekday.TUESDAY)){
notifyObservers(Event.WARSHIPS_APPROACHING);
}
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : KingJoffrey.java
// @ Date : 2016/9/1
// @ Author :
//
//
public class KingJoffrey implements EventObserver {
public void onEvent(Event event) {
System.out.println("Received event from the King's Hand: " + event.toString());
}
}
//
//
// Generated by StarUML(tm) Java Add-In
//
// @ Project : Untitled
// @ File Name : Event.java
// @ Date : 2016/9/1
// @ Author :
//
//
public enum Event {
STARK_SIGHTED("Stark sighted"), //观测荒凉的地带
WARSHIPS_APPROACHING("Warships approaching"),//战舰接近
TRAITOR_DETECTED("Traitor detected"); //发现判徒
private String description;
Event(String description) {
this.description = description;
}
public String toString() {
return description;
}
}
public enum Weekday {
MONDAY("Monday"),
TUESDAY("Tuesday"),
WEDNESDAY("Wednesday"),
THURSDAY("Thursday"),
FRIDAY("Friday"),
SATURDAY("Saturday"),
SUNDAY("Sunday");
private String description;
Weekday(String description) {
this.description = description;
}
public String toString() {
return description;
}
}
import java.util.ArrayList;
import java.util.List;
public class App {
public static void main(String[] args) {
KingJoffrey kingJoffrey = new KingJoffrey();
KingsHand kingsHand = new KingsHand(kingJoffrey);
List<EventEmitter> emitters = new ArrayList<>();
emitters.add(kingsHand);
emitters.add(new LordBaelish(kingsHand));
emitters.add(new LordVarys(kingsHand));
emitters.add(new Scout(kingsHand));
for(Weekday day:Weekday.values())
{
for(EventEmitter emitter : emitters)
{
emitter.timePasses(day);
}
}
}
}
/*
Received event from the King's Hand: Warships approaching
Received event from the King's Hand: Stark sighted
Received event from the King's Hand: Traitor detected
*/
java设计模式进阶_event-aggregator
最新推荐文章于 2024-05-16 17:07:00 发布