This pattern was common at Orbitz, although more complex. The idea was  
that you wanted to use a service for booking airline tickets. You  
would ask the factory for an implementation of the AirBookingService  
for UA or AA or NWA. Each implementation would talk to the specific  
airline and talk their special on-the-wire language.

We did this in a pretty cool way when we converted to Spring many  
years back by using a proxy service that would lazy load the real  
service after calling a lookup based on the request. Looked like this:

public class Caller {
   private AirBookingService service; // injected as a dynamic proxy

   public String doBooking() {
     AirBookingRequest request = ...;
     service.book(request);
   }
}

public class AirBookingServiceHandler implements InvocationHandler {
   private AirLookupService lookup; // injected

   public Object invoke(Object proxy, Object instance, Object..  
params) {
     AirBookingRequest request = (AirBookingRequest) params[0];
     BookingService service =  
lookup.lookupService(request.getAirlineCode());
     return service.book(request);
   }
}

That's the general gist of it anyways. The invocation handler was  
actually generic enough to handle all services and pass calls from the  
proxy to the correct service implementation. This allowed everything  
to be injected without having to inject factories everywhere.

-bp


On Aug 9, 2009, at 3:07 PM, [email protected] wrote:

>
> Hey there,
>
> Generally you wouldn't use a factory in this way - the idea is that
> the caller just expects any implementation of the interface returned
> therefore the caller specifying the implementation to use doesn't make
> sense.
>
> Out of interest, how are you using this particular piece of code?
>
> Cheers
>
> Mark
>
> On Aug 9, 3:04 pm, zhao yi <[email protected]> wrote:
>> This is my code based on Factory pattern. I want to use guice and how
>> can I convert it to use guice?
>>
>> interface Interface1{
>>         public void sayHello();
>>
>> }
>>
>> class Imple1 implements Interface1{
>>         @Override
>>         public void sayHello() {
>>                 System.out.println("imple 1");
>>         }
>>
>> }
>>
>> class Imple2 implements Interface1{
>>         @Override
>>         public void sayHello() {
>>                 System.out.println("imple 2");
>>         }
>>
>> }
>>
>> class Factory{
>>         public Interface1 getInterface(int type){
>>                 if(type == 1){
>>                         return new Imple1();
>>                 }else if(type ==2){
>>                         return new Imple2();
>>                 }
>>                 return null;
>>         }
>>
>> }
>>
>> thanks.
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to