Finished the Flux example.
This commit is contained in:
parent
c288f13b21
commit
718b3cc61d
@ -3,6 +3,22 @@ package com.iluwatar;
|
||||
public class App {
|
||||
|
||||
public static void main( String[] args ) {
|
||||
System.out.println( "Hello World!" );
|
||||
// initialize
|
||||
MenuStore menuStore = new MenuStore();
|
||||
Dispatcher.getInstance().registerStore(menuStore);
|
||||
ContentStore contentStore = new ContentStore();
|
||||
Dispatcher.getInstance().registerStore(contentStore);
|
||||
MenuView menuView = new MenuView();
|
||||
menuStore.registerView(menuView);
|
||||
ContentView contentView = new ContentView();
|
||||
contentStore.registerView(contentView);
|
||||
|
||||
// render initial view
|
||||
menuView.render();
|
||||
contentView.render();
|
||||
|
||||
// user clicks another menu item
|
||||
// this triggers action dispatching and eventually causes views to render with new content
|
||||
menuView.itemClicked(MenuItem.COMPANY);
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,16 @@ package com.iluwatar;
|
||||
|
||||
public enum Content {
|
||||
|
||||
PRODUCTS, COMPANY;
|
||||
PRODUCTS("Products - This page lists the company's products."), COMPANY("Company - This page displays information about the company.");
|
||||
|
||||
private String title;
|
||||
|
||||
private Content(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return title;
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,19 @@
|
||||
package com.iluwatar;
|
||||
|
||||
public class ContentStore implements Store {
|
||||
public class ContentStore extends Store {
|
||||
|
||||
private Content content = Content.PRODUCTS;
|
||||
|
||||
@Override
|
||||
public void onAction(Action action) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
if (action.getType().equals(ActionType.CONTENT_CHANGED)) {
|
||||
ContentAction contentAction = (ContentAction) action;
|
||||
content = contentAction.getContent();
|
||||
notifyChange();
|
||||
}
|
||||
}
|
||||
|
||||
public Content getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,10 +2,17 @@ package com.iluwatar;
|
||||
|
||||
public class ContentView implements View {
|
||||
|
||||
private Content content = Content.PRODUCTS;
|
||||
|
||||
@Override
|
||||
public void storeChanged(Store store) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
ContentStore contentStore = (ContentStore) store;
|
||||
content = contentStore.getContent();
|
||||
render();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render() {
|
||||
System.out.println(content.toString());
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ public class Dispatcher {
|
||||
private Dispatcher() {
|
||||
}
|
||||
|
||||
public Dispatcher getInstance() {
|
||||
public static Dispatcher getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
@ -21,6 +21,20 @@ public class Dispatcher {
|
||||
}
|
||||
|
||||
public void menuItemSelected(MenuItem menuItem) {
|
||||
|
||||
dispatchAction(new MenuAction(menuItem));
|
||||
switch (menuItem) {
|
||||
case HOME:
|
||||
case PRODUCTS:
|
||||
default:
|
||||
dispatchAction(new ContentAction(Content.PRODUCTS));
|
||||
break;
|
||||
case COMPANY:
|
||||
dispatchAction(new ContentAction(Content.COMPANY));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void dispatchAction(Action action) {
|
||||
stores.stream().forEach((store) -> store.onAction(action));
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,16 @@ package com.iluwatar;
|
||||
|
||||
public enum MenuItem {
|
||||
|
||||
HOME, PRODUCTS, COMPANY;
|
||||
HOME("Home"), PRODUCTS("Products"), COMPANY("Company");
|
||||
|
||||
private String title;
|
||||
|
||||
MenuItem(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return title;
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,19 @@
|
||||
package com.iluwatar;
|
||||
|
||||
public class MenuStore implements Store {
|
||||
public class MenuStore extends Store {
|
||||
|
||||
private MenuItem selected = MenuItem.HOME;
|
||||
|
||||
@Override
|
||||
public void onAction(Action action) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
if (action.getType().equals(ActionType.MENU_ITEM_SELECTED)) {
|
||||
MenuAction menuAction = (MenuAction) action;
|
||||
selected = menuAction.getMenuItem();
|
||||
notifyChange();
|
||||
}
|
||||
}
|
||||
|
||||
public MenuItem getSelected() {
|
||||
return selected;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2,10 +2,27 @@ package com.iluwatar;
|
||||
|
||||
public class MenuView implements View {
|
||||
|
||||
private MenuItem selected = MenuItem.HOME;
|
||||
|
||||
@Override
|
||||
public void storeChanged(Store store) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
MenuStore menuStore = (MenuStore) store;
|
||||
selected = menuStore.getSelected();
|
||||
render();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render() {
|
||||
for (MenuItem item: MenuItem.values()) {
|
||||
if (selected.equals(item)) {
|
||||
System.out.println(String.format("* %s", item.toString()));
|
||||
} else {
|
||||
System.out.println(item.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void itemClicked(MenuItem item) {
|
||||
Dispatcher.getInstance().menuItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,19 @@
|
||||
package com.iluwatar;
|
||||
|
||||
public interface Store {
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public void onAction(Action action);
|
||||
public abstract class Store {
|
||||
|
||||
private List<View> views = new LinkedList<>();
|
||||
|
||||
public abstract void onAction(Action action);
|
||||
|
||||
public void registerView(View view) {
|
||||
views.add(view);
|
||||
}
|
||||
|
||||
protected void notifyChange() {
|
||||
views.stream().forEach((view) -> view.storeChanged(this));
|
||||
}
|
||||
}
|
||||
|
@ -3,5 +3,6 @@ package com.iluwatar;
|
||||
public interface View {
|
||||
|
||||
public void storeChanged(Store store);
|
||||
|
||||
|
||||
public void render();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user