O.K. Thanks for the comment, I'll consider removing it since it appears it may be too complex for a Jr. Programmer. I'm a little suprised that the use of InvocationHandlers(Proxy Classes) to implement Facades has not been discussed in this list before.
Just for future reference though maybe I'll provide a little more of a description of them for everyone.
A Proxy class is a class that dynamiclly creates stub (not RMI related) classes of an array of provided interfaces. It uses an InvocationHandler to process all the method calls of the Proxy class. (When you create a Proxy class you have to provide a ClassLoader I don't know what it's for either it's just in the example in the API docs) Proxy Class API doc
The InvocationHandler Interface has a single method in it. InvocationHandler API doc.
The Method passed into invoke() is the method called on the Proxy class. So if needed special handling can be provided for individual methods by checking the method passed into invoke() or the same code can be executed for all the methods invoked.
So in the case of facades the majority of methods called on a facade end up being simple pass throughs to the class being facaded. Or they all perform the same type of convertion to call the method on a remote object or something like that.
In the case of the Developer Assignment I'm using Sockets instead of RMI so every method called on the facade must be translated and trasmitted to the server in the exact same way. So the facade comes in handy because it makes me only implement the translation and transmission code once for all the methods of my facade interface. Which holds the following advantages.
1. Your translation and communication facade code becomes reusable. If any other interface were needed to be translated and communicated to a server the very same InvocationHandler could be used to do this with Zero new code.
2. Your code becomes more flexible. If a method is added to the facade interface then no new code needs to be implemented in your facade classes.
3. Less bug prone because their is zero code duplication.
Anyway, If anyone is interested in seeing how I used the InvocationHandler in my project just ask.