Commented the example code.

This commit is contained in:
Ilkka Seppala 2015-05-03 23:34:38 +03:00
parent 61f0a2acf7
commit 523551a3fa
14 changed files with 81 additions and 3 deletions

View File

@ -1,6 +1,10 @@
package com.iluwatar.action;
/**
*
* Action is the data payload dispatched to the stores when something happens.
*
*/
public abstract class Action {
private ActionType type;

View File

@ -1,5 +1,10 @@
package com.iluwatar.action;
/**
*
* Types of actions.
*
*/
public enum ActionType {
MENU_ITEM_SELECTED, CONTENT_CHANGED;

View File

@ -1,5 +1,10 @@
package com.iluwatar.action;
/**
*
* Content items.
*
*/
public enum Content {
PRODUCTS("Products - This page lists the company's products."), COMPANY("Company - This page displays information about the company.");

View File

@ -1,6 +1,10 @@
package com.iluwatar.action;
/**
*
* ContentAction is a concrete action.
*
*/
public class ContentAction extends Action {
private Content content;

View File

@ -1,6 +1,11 @@
package com.iluwatar.action;
/**
*
* MenuAction is a concrete action.
*
*/
public class MenuAction extends Action {
private MenuItem menuItem;

View File

@ -1,5 +1,10 @@
package com.iluwatar.action;
/**
*
* Menu items.
*
*/
public enum MenuItem {
HOME("Home"), PRODUCTS("Products"), COMPANY("Company");

View File

@ -7,10 +7,25 @@ import com.iluwatar.store.MenuStore;
import com.iluwatar.view.ContentView;
import com.iluwatar.view.MenuView;
/**
*
* Flux is the application architecture that Facebook uses for building client-side web
* applications. Flux eschews MVC in favor of a unidirectional data flow. When a user interacts with
* a React view, the view propagates an action through a central dispatcher, to the various stores that
* hold the application's data and business logic, which updates all of the views that are affected.
*
* This example has two views: menu and content. They represent typical main menu and content area of
* a web page. When menu item is clicked it triggers events through the dispatcher. The events are
* received and handled by the stores updating their data as needed. The stores then notify the views
* that they should rerender themselves.
*
* http://facebook.github.io/flux/docs/overview.html
*
*/
public class App {
public static void main( String[] args ) {
// initialize
// initialize and wire the system
MenuStore menuStore = new MenuStore();
Dispatcher.getInstance().registerStore(menuStore);
ContentStore contentStore = new ContentStore();

View File

@ -10,6 +10,11 @@ import com.iluwatar.action.MenuAction;
import com.iluwatar.action.MenuItem;
import com.iluwatar.store.Store;
/**
*
* Dispatcher sends Actions to registered Stores.
*
*/
public class Dispatcher {
private static Dispatcher instance = new Dispatcher();

View File

@ -5,6 +5,11 @@ import com.iluwatar.action.ActionType;
import com.iluwatar.action.Content;
import com.iluwatar.action.ContentAction;
/**
*
* ContentStore is a concrete store.
*
*/
public class ContentStore extends Store {
private Content content = Content.PRODUCTS;

View File

@ -5,6 +5,11 @@ import com.iluwatar.action.ActionType;
import com.iluwatar.action.MenuAction;
import com.iluwatar.action.MenuItem;
/**
*
* MenuStore is a concrete store.
*
*/
public class MenuStore extends Store {
private MenuItem selected = MenuItem.HOME;

View File

@ -6,6 +6,11 @@ import java.util.List;
import com.iluwatar.action.Action;
import com.iluwatar.view.View;
/**
*
* Store is a data model.
*
*/
public abstract class Store {
private List<View> views = new LinkedList<>();

View File

@ -4,6 +4,11 @@ import com.iluwatar.action.Content;
import com.iluwatar.store.ContentStore;
import com.iluwatar.store.Store;
/**
*
* ContentView is a concrete view.
*
*/
public class ContentView implements View {
private Content content = Content.PRODUCTS;

View File

@ -5,6 +5,11 @@ import com.iluwatar.dispatcher.Dispatcher;
import com.iluwatar.store.MenuStore;
import com.iluwatar.store.Store;
/**
*
* MenuView is a concrete view.
*
*/
public class MenuView implements View {
private MenuItem selected = MenuItem.HOME;

View File

@ -2,6 +2,11 @@ package com.iluwatar.view;
import com.iluwatar.store.Store;
/**
*
* Views define the representation of data.
*
*/
public interface View {
public void storeChanged(Store store);