/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This file is part of the design patterns project at UBC * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is ca.ubc.cs.spl.patterns. * * Contributor(s): */ import java.awt.Color; /** * Implements the driver for the observer design pattern example.

* * Intent: Define a one-to-many dependency between objects so that when one * object changes state, all its dependents are notified and updated * automatically

* * Participatng objects are Point p and Screen * s1, s2, s3, s4, and s5.

* * Three different kinds of observing relationships are realized:

* * * Every time an event of interest occurs, the observing Screen * prints and appropriate message to stdout. * *

This is the AspectJ version.

* * @author Gregor Kiczales * @author Jan Hannemann * @version 1.0, 05/13/02 * * @see Point * @see Screen */ public class Main { /** * Implements the driver for the observer example. It creates five * Screen objects and one Point object * and sets the appropriate observing relationships (see above). * After the setup, the color of the point is changed, then it's * x-coordinate.

* The following results should be expected:

    *
  1. The color change should trigger s1 and s2 to each print an * appropriate message. *
  2. s2's message should trigger it's observer s5 to print * a message. *
  3. The coordinate change should trigger s3 and s4. *
  4. s4's message should trigger it's observer s5 again. *
*/ public static void main(String argv[]) { Point p = new Point(5, 5, Color.blue); System.out.println("Creating Screen s1,s2,s3,s4,s5 and Point p"); Screen s1 = new Screen("s1"); Screen s2 = new Screen("s2"); Screen s3 = new Screen("s3"); Screen s4 = new Screen("s4"); Screen s5 = new Screen("s5"); System.out.println("Creating observing relationships:"); System.out.println("- s1 and s2 observe color changes to p"); System.out.println("- s3 and s4 observe coordinate changes to p"); System.out.println("- s5 observes s2's and s4's display() method"); ColorObserver.aspectOf().addObserver(p, s1); ColorObserver.aspectOf().addObserver(p, s2); CoordinateObserver.aspectOf().addObserver(p, s3); CoordinateObserver.aspectOf().addObserver(p, s4); ScreenObserver.aspectOf().addObserver(s2, s5); ScreenObserver.aspectOf().addObserver(s4, s5); System.out.println("Changing p's color:"); p.setColor(Color.red); System.out.println("Changing p's x-coordinate:"); p.setX(4); System.out.println("done."); } }