#113 Event Driven Architecture

- refactored and moved around some classes
This commit is contained in:
chris 2015-11-23 00:02:58 +01:00
parent eb396217d0
commit 3ef0921f20
13 changed files with 79 additions and 27 deletions

View File

@ -1,10 +1,18 @@
package com.iluwatar.eda.advanced;
import com.iluwatar.eda.advanced.events.Event;
import com.iluwatar.eda.advanced.events.UserCreatedEvent;
import com.iluwatar.eda.advanced.events.UserUpdatedEvent;
import com.iluwatar.eda.advanced.handler.UserCreatedEventHandler;
import com.iluwatar.eda.advanced.handler.UserUpdatedEventHandler;
public class App {
public static void main(String[] args) {
EventDispatcher dispatcher = new EventDispatcher();
dispatcher.registerChannel(Event.class, new Handler());
dispatcher.dispatch(new Event());
dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler());
dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler());
dispatcher.dispatch(new UserCreatedEvent());
dispatcher.dispatch(new UserUpdatedEvent());
}
}

View File

@ -1,6 +0,0 @@
package com.iluwatar.eda.advanced;
public interface Channel<E extends Message> {
public void dispatch(E message);
}

View File

@ -1,6 +0,0 @@
package com.iluwatar.eda.advanced;
public interface DynamicRouter<E extends Message> {
public void registerChannel(Class<? extends E> contentType, Channel<? extends E> channel);
public void dispatch(E content);
}

View File

@ -1,18 +1,23 @@
package com.iluwatar.eda.advanced;
import com.iluwatar.eda.advanced.events.Event;
import com.iluwatar.eda.advanced.framework.Channel;
import com.iluwatar.eda.advanced.framework.DynamicRouter;
import java.util.HashMap;
import java.util.Map;
public class EventDispatcher implements DynamicRouter<Event> {
private Map<Class<? extends Event>, Handler> handlers;
private Map<Class<? extends Event>, Channel> handlers;
public EventDispatcher() {
handlers = new HashMap<Class<? extends Event>, Handler>();
handlers = new HashMap<Class<? extends Event>, Channel>();
}
public void registerChannel(Class<? extends Event> contentType,
Channel<? extends Event> channel) {
handlers.put(contentType, (Handler)channel);
Channel channel) {
handlers.put(contentType, channel);
}
public void dispatch(Event content) {

View File

@ -1,7 +0,0 @@
package com.iluwatar.eda.advanced;
public class Handler implements Channel<Event> {
public void dispatch(Event message) {
System.out.println(message.getClass());
}
}

View File

@ -1,4 +1,6 @@
package com.iluwatar.eda.advanced;
package com.iluwatar.eda.advanced.events;
import com.iluwatar.eda.advanced.framework.Message;
public class Event implements Message {
public Class<? extends Message> getType() {

View File

@ -0,0 +1,9 @@
package com.iluwatar.eda.advanced.events;
import com.iluwatar.eda.advanced.events.Event;
/**
* @author cfarrugia
*/
public class UserCreatedEvent extends Event {
}

View File

@ -0,0 +1,6 @@
package com.iluwatar.eda.advanced.events;
import com.iluwatar.eda.advanced.events.Event;
public class UserUpdatedEvent extends Event {
}

View File

@ -0,0 +1,8 @@
package com.iluwatar.eda.advanced.framework;
import com.iluwatar.eda.advanced.events.Event;
public interface Channel<E extends Event> {
void dispatch(E message);
}

View File

@ -0,0 +1,6 @@
package com.iluwatar.eda.advanced.framework;
public interface DynamicRouter<E extends Message> {
void registerChannel(Class<? extends E> contentType, Channel channel);
void dispatch(E content);
}

View File

@ -1,4 +1,4 @@
package com.iluwatar.eda.advanced;
package com.iluwatar.eda.advanced.framework;
public interface Message {

View File

@ -0,0 +1,15 @@
package com.iluwatar.eda.advanced.handler;
import com.iluwatar.eda.advanced.events.Event;
import com.iluwatar.eda.advanced.events.UserCreatedEvent;
import com.iluwatar.eda.advanced.framework.Channel;
/**
* @author cfarrugia
*/
public class UserCreatedEventHandler implements Channel<UserCreatedEvent> {
public void dispatch(UserCreatedEvent message) {
System.out.println("User Created!");
}
}

View File

@ -0,0 +1,12 @@
package com.iluwatar.eda.advanced.handler;
import com.iluwatar.eda.advanced.events.Event;
import com.iluwatar.eda.advanced.events.UserUpdatedEvent;
import com.iluwatar.eda.advanced.framework.Channel;
public class UserUpdatedEventHandler implements Channel<UserUpdatedEvent> {
public void dispatch(UserUpdatedEvent message) {
System.out.println("User Updated!");
}
}