Service Locator is usually (at least I have) used to cache JNDI references of
EJB Home objects, JMS Connection factories, JMS Queues etc. In other words anything you look up via JNDI can be cached
via a Service Locator pattern. It can be a HashMap or an Hashtable where you will store the references with an appropriate key. The reason this is done is that "JNDI LOOK UP" is an expensive process and ought to be done
only once. In my application this is done when the Application starts in the "init" method of the
servlet.
Business Delegate is used when you don't want your clients (Servlets for example) to be directly exposed to business services. These services can either be session beans or POJO's. The reason is that the business
logic api is prone to change often and you don't want your clients to be "tightly coupled" to the services. This pattern is a mediator between clients and the business services. When the services change, you would change
ONLY the business delegate and NOT client code. Also Delegates can cache business data and return results to clients in the event business services are unavailable. One another reason you would use Business Delegates is that you could "STUB" the Business data back to client for
testing purposes during initial phases of the project
Session Facade is typically used to "HIDE" a SET of session beans or services that DO a SIMILAR work in an application. For example, in a banking application there can be lot of session beans to handle "Account opening, modification and deletion". You can wrap all these three in an outer "account session facade". This facade will delegate to the appropriate session bean performing the service. Similarly you could have another set of services to handle deposit, withdrawals, overdraft etc. You would wrap these three in another "AccountActivitySessionFacade". Basically facades encapsulate "SIMILAR set of functionalities performed by various business services"