java设计模式进阶_event-aggregator

这里写图片描述

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

*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值