Can't I use provider to do this? If I use factory pattern, I only need
one factory class. However, If I use guice, I have to create one
factory class, one Module class and one provider class. I think guice
will make our application more complicated.


On Aug 10, 3:00 pm, Brian Pontarelli <[email protected]> wrote:
> 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