Thanks for the quick response! I've been giving a lot of consideration to your suggestion, and have developed a tentative plan. (How could one possibly develop such a project without planning? :shudders
Let's see: The GUIController requests a connection from the ConnectionFactory. The getLocalConnection returns a LocalConnection (from the db package), and the getRemoteConnection returns a RemoteConnection (from the remote package).
The Connection interface (in the db package) provides the same methods as the DBAccess interface, but ADAPTS the signatures to the needs of LocalConnection and RemoteConnection, perhaps by including "throws IOException" in the method signatures. The Connection interface maintains a reference to DBAccess (?).
Now, LocalConnection implements Connection directly, whereas RemoteConnection simply extends Connection and Remote. Therefore, DataImpl, which implements RemoteConnection, is allowed to include "throws RemoteException" in its method signatures.
It should look something like this:
Connection adapts DBAccess
LocalConnection implements Connection
RemoteConnection extends Connection, Remote
DataImpl implements RemoteConnection
ConnectionFactory returns Connections (RemoteConnection or LocalConnection)
Am I on the right trail?