/* * ****************************************************************************** * * Copyright 2015 See AUTHORS file. * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * ***************************************************************************** */ package com.puremvc.patterns.observer; /** * The interface definition for a PureMVC Notification. * <p> * <p> * PureMVC does not rely upon underlying event models such as the one provided * with Flash, and ActionScript 3 does not have an inherent event model. * </P> * <p> * <p> * The Observer Pattern as implemented within PureMVC exists to support * event-driven communication between the application and the actors of the MVC * triad. * </P> * <p> * <p> * Notifications are not meant to be a replacement for Events in * Flex/Flash/Apollo. Generally, <code>IMediator</code> implementors place * event listeners on their view components, which they then handle in the usual * way. This may lead to the broadcast of <code>Notification</code>s to * trigger <code>ICommand</code>s or to communicate with other * <code>IMediators</code>. <code>IProxy</code> and <code>ICommand</code> * instances communicate with each other and <code>IMediator</code>s by * broadcasting <code>INotification</code>s. * </P> * <p> * <p> * A key difference between Flash <code>Event</code>s and PureMVC * <code>Notification</code>s is that <code>Event</code>s follow the * 'Chain of Responsibility' pattern, 'bubbling' up the display hierarchy until * some parent component handles the <code>Event</code>, while PureMVC * <code>Notification</code>s follow a 'Publish/Subscribe' pattern. PureMVC * classes need not be related to each other in a parent/child relationship in * order to communicate with one another using <code>Notification</code>s. * * @see com.puremvc.core.View View * @see com.puremvc.patterns.observer.Observer Observer */ public interface Notification { /** * Get the name of the <code>INotification</code> instance. No setter, * should be set by constructor only * * @return the name */ String getName(); /** * Get the body of the <code>INotification</code> instance * * @return the body */ <T> T getBody(); /** * Set the body of the <code>INotification</code> instance * * @param body */ <T> void setBody(T body); /** * Get the type of the <code>INotification</code> instance * * @return the type */ String getType(); /** * Set the type of the <code>Notification</code> instance * * @param type the type */ void setType(String type); /** * Get the string representation of the <code>INotification</code> * instance * * @return the string representation of the <code>INotification</code> * instance */ String toString(); }