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
-~----------~----~----~----~------~----~------~--~---