

| Visible within the declaring class and to selected other classes or operations. | 
| Visible everywhere that the class is visible. | 
| Visible only within the declaring class. | 
| Visible within the declaring class and in all its sub-classes. | 
SoundStage?
          
interface 
          and a class.
          

He suggested that I start using the following generalization:

Do you agree with him? Why or why not?
JMUmble.  In this
    system, arriving messages are handled by a PostOffice
    object. Depending on how the system is configured at runtime, one or
    more objects might need to know when a message arrives. I have
    currently implemented several such classes:
    ScreenFlasher (which makes the entire screen flash --
    you always know when a message has arrived),
    PopularityTimer (which starts a clock that show the
    amount of time since the most recent message arrived), and
    Mumbler (which uses speech generation to read the name
    of the person that sent the message -- this is where the system got
    its name).  Use the observer pattern to develop a class model of
    this system (in UML). You do not need to include the attributes of
    each class, only the operations/methods. Include comments that
    describe each operation/method.  
    
GateListenerDatabase class so that it is impossible
    to construct more than one instance of it.  Use the
    singleton pattern.
    
import java.util.*;
/**
 * A database of GateListenerRecord objects
 *
 */
public class GateListenerDatabase
{
    private Hashtable              db;
    /**
     * Construct a new GateListenerDatabase
     */
    public GateListenerDatabase()
    {
	db = new Hashtable();
    }
    /**
     * Add a GateListenerRecord to the database
     *
     * @param glr  The record to add
     * @return     true if successful and false otherwise
     */ 
    public boolean add(GateListenerRecord glr)
    {
	boolean            added;
	GateListenerRecord old;
	String             key;
	added = false;
	key = glr.getHost()+":"+glr.getPort();
	old = (GateListenerRecord)(db.get(key));
	if (old != null) {
	    added = false;
	} else {
	    added = true;
	    db.put(key, glr);
	}
	return added;
    }
    /**
     * Drop a GateListenerRecord from the database
     *
     * @param glr  The record to drop
     * @return     true if successful and false otherwise
     */
    public boolean drop(GateListenerRecord glr)
    {
	boolean   dropped;
	Object    oldkey;
	String    key;
	key = glr.getHost()+":"+glr.getPort();
	oldkey = db.remove(key);
	dropped = true;
	if (oldkey == null) dropped = false;
	return dropped;
    }
    /**
     * Returns an Enumeration containing all of the GateListenerRecord 
     * Objects in the database
     *
     * @return  The Enumeration of records
     */
    public Enumeration getAll()
    {
	return db.elements();
    }
}
    

Shape | 
Line | 
Rectangle | 
Text | 
Drawing | 
operation() | 
Copyright ©2004