Class Facade

java.lang.Object
org.puremvc.java.patterns.facade.Facade
All Implemented Interfaces:
IFacade, INotifier

public class Facade
extends java.lang.Object
implements IFacade

A base Singleton IFacade implementation.

In PureMVC, the Facade class assumes these responsibilities:

  • Initializing the Model, View and Controller Singletons.
  • Providing all the methods defined by the IModel, IView, & IController interfaces.
  • Providing the ability to override the specific Model, View and Controller Singletons created.
  • Providing a single point of contact to the application for registering Commands and notifying Observers

Example usage:

  
	import org.puremvc.as3.patterns.facade.Facade;

	import com.me.myapp.model.*;
	import com.me.myapp.view.*;
	import com.me.myapp.controller.*;

	public class MyFacade extends Facade
	{
		// Notification constants. The Facade is the ideal
		// location for these constants, since any part
		// of the application participating in PureMVC
		// Observer Notification will know the Facade.
		public static final String GO_COMMAND = "go";

		// Override Singleton Factory method
		public synchronized static IFacade getInstance(Supplier<IFacade> facadeSupplier) {
			if(instance == null) instance = facadeSupplier.get();
			return instance;
		}

		// optional initialization hook for Facade
		public void initializeFacade() {
			super.initializeFacade();
			// do any special subclass initialization here
		}

		// optional initialization hook for Controller
		public void initializeController()  {
			// call super to use the PureMVC Controller Singleton.
			super.initializeController();

			// Otherwise, if you're implmenting your own
			// IController, then instead do:
			// if ( controller != null ) return;
			// controller = MyAppController.getInstance(() -> new MyAppController());

			// do any special subclass initialization here
			// such as registering Commands
			registerCommand( GO_COMMAND, () -> new com.me.myapp.controller.GoCommand() )
		}

		// optional initialization hook for Model
		public void initializeModel() {
			// call super to use the PureMVC Model Singleton.
			super.initializeModel();

			// Otherwise, if you're implmenting your own
			// IModel, then instead do:
			// if ( model != null ) return;
			// model = MyAppModel.getInstance(() -> new MyAppModel());

			// do any special subclass initialization here
			// such as creating and registering Model proxys
			// that don't require a facade reference at
			// construction time, such as fixed type lists
			// that never need to send Notifications.
			registerProxy( new USStateNamesProxy() );

			// CAREFUL: Can't reference Facade instance in constructor
			// of new Proxys from here, since this step is part of
			// Facade construction!  Usually, Proxys needing to send
			// notifications are registered elsewhere in the app
			// for this reason.
		}

		// optional initialization hook for View
		public void initializeView() {
			// call super to use the PureMVC View Singleton.
			super.initializeView();

			// Otherwise, if you're implmenting your own
			// IView, then instead do:
			// if ( view != null ) return;
			// view = MyAppView.getInstance(() -> new MyAppView());

			// do any special subclass initialization here
			// such as creating and registering Mediators
			// that do not need a Facade reference at construction
			// time.
			registerMediator( new LoginMediator() );

			// CAREFUL: Can't reference Facade instance in constructor
			// of new Mediators from here, since this is a step
			// in Facade construction! Usually, all Mediators need
			// receive notifications, and are registered elsewhere in
			// the app for this reason.
		}
	}
 
 
See Also:
Model, View, Controller, Notification, Mediator, Proxy, SimpleCommand, MacroCommand
  • Field Summary

    Fields 
    Modifier and Type Field Description
    protected IController controller  
    protected static IFacade instance  
    protected IModel model  
    protected java.lang.String SINGLETON_MSG  
    protected IView view  
  • Constructor Summary

    Constructors 
    Constructor Description
    Facade()
    Constructor.
  • Method Summary

    Modifier and Type Method Description
    static IFacade getInstance​(java.util.function.Supplier<IFacade> factory)
    Facade Singleton Factory method
    boolean hasCommand​(java.lang.String notificationName)
    Check if a Command is registered for a given Notification
    boolean hasMediator​(java.lang.String mediatorName)
    Check if a Mediator is registered or not
    boolean hasProxy​(java.lang.String proxyName)
    Check if a Proxy is registered
    protected void initializeController()
    Initialize the Controller.
    protected void initializeFacade()
    Initialize the Singleton Facade instance.
    protected void initializeModel()
    Initialize the Model.
    protected void initializeView()
    Initialize the View.
    void notifyObservers​(INotification notification)
    Notify Observers.
    void registerCommand​(java.lang.String notificationName, java.util.function.Supplier<ICommand> commandSupplier)
    Register an ICommand with the Controller by Notification name.
    void registerMediator​(IMediator mediator)
    Register a IMediator with the View.
    void registerProxy​(IProxy proxy)
    Register an IProxy with the Model by name.
    void removeCommand​(java.lang.String notificationName)
    Remove a previously registered ICommand to INotification mapping from the Controller.
    IMediator removeMediator​(java.lang.String mediatorName)
    Remove an IMediator from the View.
    IProxy removeProxy​(java.lang.String proxyName)
    Remove an IProxy from the Model by name.
    IMediator retrieveMediator​(java.lang.String mediatorName)
    Retrieve an IMediator from the View.
    IProxy retrieveProxy​(java.lang.String proxyName)
    Retrieve an IProxy from the Model by name.
    void sendNotification​(java.lang.String notificationName)
    Create and send an INotification.
    void sendNotification​(java.lang.String notificationName, java.lang.Object body)
    Create and send an INotification.
    void sendNotification​(java.lang.String notificationName, java.lang.Object body, java.lang.String type)
    Create and send an INotification.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

    • Facade

      public Facade()

      Constructor.

      This IFacade implementation is a Singleton, so you should not call the constructor directly, but instead call the static Singleton Factory method Facade.getInstance()

      Throws:
      java.lang.Error - Error if Singleton instance has already been constructed
  • Method Details

    • initializeFacade

      protected void initializeFacade()

      Initialize the Singleton Facade instance.

      Called automatically by the constructor. Override in your subclass to do any subclass specific initializations. Be sure to call super.initializeFacade(), though.

    • getInstance

      public static IFacade getInstance​(java.util.function.Supplier<IFacade> factory)

      Facade Singleton Factory method

      Parameters:
      factory - facade Supplier Function
      Returns:
      the Singleton instance of the Facade
    • initializeController

      protected void initializeController()

      Initialize the Controller.

      Called by the initializeFacade method. Override this method in your subclass of Facade if one or both of the following are true:

      • You wish to initialize a different IController.
      • You have Commands to register with the Controller at startup.

      If you don't want to initialize a different IController, call super.initializeController() at the beginning of your method, then register Commands.

    • initializeModel

      protected void initializeModel()

      Initialize the Model.

      Called by the initializeFacade method. Override this method in your subclass of Facade if one or both of the following are true:

      • You wish to initialize a different IModel.
      • You have Proxys to register with the Model that do not retrieve a reference to the Facade at construction time.

      If you don't want to initialize a different IModel, call super.initializeModel() at the beginning of your method, then register Proxys.

      Note: This method is rarely overridden; in practice you are more likely to use a Command to create and register Proxys with the Model, since Proxys with mutable data will likely need to send INotifications and thus will likely want to fetch a reference to the Facade during their construction.

    • initializeView

      protected void initializeView()

      Initialize the View.

      Called by the initializeFacade method. Override this method in your subclass of Facade if one or both of the following are true:

      • You wish to initialize a different IView.
      • You have Observers to register with the View

      If you don't want to initialize a different IView, call super.initializeView() at the beginning of your method, then register IMediator instances.

      Note: This method is rarely overridden; in practice you are more likely to use a Command to create and register Mediators with the View, since IMediator instances will need to send INotifications and thus will likely want to fetch a reference to the Facade during their construction.

    • registerCommand

      public void registerCommand​(java.lang.String notificationName, java.util.function.Supplier<ICommand> commandSupplier)

      Register an ICommand with the Controller by Notification name.

      Specified by:
      registerCommand in interface IFacade
      Parameters:
      notificationName - the name of the INotification to associate the ICommand with
      commandSupplier - a reference to the Supplier Function of the ICommand
    • removeCommand

      public void removeCommand​(java.lang.String notificationName)

      Remove a previously registered ICommand to INotification mapping from the Controller.

      Specified by:
      removeCommand in interface IFacade
      Parameters:
      notificationName - the name of the INotification to remove the ICommand mapping for
    • hasCommand

      public boolean hasCommand​(java.lang.String notificationName)

      Check if a Command is registered for a given Notification

      Specified by:
      hasCommand in interface IFacade
      Parameters:
      notificationName - notification name
      Returns:
      whether a Command is currently registered for the given notificationName.
    • registerProxy

      public void registerProxy​(IProxy proxy)

      Register an IProxy with the Model by name.

      Specified by:
      registerProxy in interface IFacade
      Parameters:
      proxy - the IProxy instance to be registered with the Model.
    • retrieveProxy

      public IProxy retrieveProxy​(java.lang.String proxyName)

      Retrieve an IProxy from the Model by name.

      Specified by:
      retrieveProxy in interface IFacade
      Parameters:
      proxyName - the name of the proxy to be retrieved.
      Returns:
      the IProxy instance previously registered with the given proxyName.
    • removeProxy

      public IProxy removeProxy​(java.lang.String proxyName)

      Remove an IProxy from the Model by name.

      Specified by:
      removeProxy in interface IFacade
      Parameters:
      proxyName - the IProxy to remove from the Model.
      Returns:
      the IProxy that was removed from the Model
    • hasProxy

      public boolean hasProxy​(java.lang.String proxyName)

      Check if a Proxy is registered

      Specified by:
      hasProxy in interface IFacade
      Parameters:
      proxyName - proxy name
      Returns:
      whether a Proxy is currently registered with the given proxyName.
    • registerMediator

      public void registerMediator​(IMediator mediator)

      Register a IMediator with the View.

      Specified by:
      registerMediator in interface IFacade
      Parameters:
      mediator - a reference to the IMediator
    • retrieveMediator

      public IMediator retrieveMediator​(java.lang.String mediatorName)

      Retrieve an IMediator from the View.

      Specified by:
      retrieveMediator in interface IFacade
      Parameters:
      mediatorName - mediator name
      Returns:
      the IMediator previously registered with the given mediatorName.
    • removeMediator

      public IMediator removeMediator​(java.lang.String mediatorName)

      Remove an IMediator from the View.

      Specified by:
      removeMediator in interface IFacade
      Parameters:
      mediatorName - name of the IMediator to be removed.
      Returns:
      the IMediator that was removed from the View
    • hasMediator

      public boolean hasMediator​(java.lang.String mediatorName)

      Check if a Mediator is registered or not

      Specified by:
      hasMediator in interface IFacade
      Parameters:
      mediatorName - mediator name
      Returns:
      whether a Mediator is registered with the given mediatorName.
    • sendNotification

      public void sendNotification​(java.lang.String notificationName, java.lang.Object body, java.lang.String type)

      Create and send an INotification.

      Keeps us from having to construct new notification instances in our implementation code.

      Specified by:
      sendNotification in interface INotifier
      Parameters:
      notificationName - the name of the notiification to send
      body - the body of the notification
      type - the type of the notification
    • sendNotification

      public void sendNotification​(java.lang.String notificationName, java.lang.Object body)

      Create and send an INotification.

      Keeps us from having to construct new notification instances in our implementation code.

      Specified by:
      sendNotification in interface INotifier
      Parameters:
      notificationName - the name of the notiification to send
      body - the body of the notification
    • sendNotification

      public void sendNotification​(java.lang.String notificationName)

      Create and send an INotification.

      Keeps us from having to construct new notification instances in our implementation code.

      Specified by:
      sendNotification in interface INotifier
      Parameters:
      notificationName - the name of the notiification to send
    • notifyObservers

      public void notifyObservers​(INotification notification)

      Notify Observers.

      This method is left public mostly for backward compatibility, and to allow you to send custom notification classes using the facade.

      Usually you should just call sendNotification and pass the parameters, never having to construct the notification yourself.

      Specified by:
      notifyObservers in interface IFacade
      Parameters:
      notification - the INotification to have the View notify Observers of.