Finished the Flux example.
This commit is contained in:
parent
c288f13b21
commit
718b3cc61d
@ -3,6 +3,22 @@ package com.iluwatar;
|
|||||||
public class App {
|
public class App {
|
||||||
|
|
||||||
public static void main( String[] args ) {
|
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 {
|
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;
|
package com.iluwatar;
|
||||||
|
|
||||||
public class ContentStore implements Store {
|
public class ContentStore extends Store {
|
||||||
|
|
||||||
|
private Content content = Content.PRODUCTS;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAction(Action action) {
|
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 {
|
public class ContentView implements View {
|
||||||
|
|
||||||
|
private Content content = Content.PRODUCTS;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void storeChanged(Store store) {
|
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() {
|
private Dispatcher() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dispatcher getInstance() {
|
public static Dispatcher getInstance() {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,6 +21,20 @@ public class Dispatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void menuItemSelected(MenuItem menuItem) {
|
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 {
|
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;
|
package com.iluwatar;
|
||||||
|
|
||||||
public class MenuStore implements Store {
|
public class MenuStore extends Store {
|
||||||
|
|
||||||
|
private MenuItem selected = MenuItem.HOME;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAction(Action action) {
|
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 {
|
public class MenuView implements View {
|
||||||
|
|
||||||
|
private MenuItem selected = MenuItem.HOME;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void storeChanged(Store store) {
|
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;
|
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 interface View {
|
||||||
|
|
||||||
public void storeChanged(Store store);
|
public void storeChanged(Store store);
|
||||||
|
|
||||||
|
public void render();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user