Not taking away from other suggestions, but it's fairly idiomatic to use a
MapBinder
<http://google.github.io/guice/api-docs/latest/javadoc/index.html?com/google/inject/multibindings/MapBinder.html>
in this scenario. You'd inject the Map<String, Action> into your servlet
and .get(request.getAction()).doAction();

Fred



On Tue, May 26, 2015 at 9:23 PM, Nate Bauernfeind <
[email protected]> wrote:

> Oh yeah, I forgot to mention, I love making my factories inner static
> interfaces! It *really* helps keep relevant things together. Doing that
> here is also a natural choice.
>
> On Wed, May 27, 2015 at 12:17 AM Nate Bauernfeind <
> [email protected]> wrote:
>
>> I want to say yes, but I'm afraid that request.getAction() is returning a
>> string. Is this true? What would you expect your factory to look like?
>>
>> If they're strings you might have to resort to something like this:
>>
>> interface ActionFactory {
>>   public Action.ADD newAdd();
>>   public Action.UPDATE newUpdate();
>>   public Action.DELETE newDelete();
>> }
>>
>> public abstract class Action {
>>     public abstract double doAction();
>>
>>     public static class ADD extends Action {
>>         @Override
>>         public double doAction() { ... }
>>     }
>>
>>     // ...
>>
>>     public static Action parse(String action, ActionFactory factory) {
>>         switch(action) {
>>           case "ADD":
>>             return factory.newAdd();
>>            ...
>>         }
>>     }
>> }
>>
>> It's not too bad. If getAction() returns something that is typesafe then
>> you can have multiple overloaded "create" methods in your factory and do
>> without the Action.parse method. It also might make sense to use this
>> pattern in addition to having an enum, and then parse the enum and pass the
>> enum into Action.parse instead of the String.
>>
>>
>> On Tue, May 26, 2015 at 11:54 PM klc <[email protected]> wrote:
>>
>>> I like the pattern concise and simple, in our service class:
>>>
>>> Action action = Action.parse(request.getAction());
>>> action.doAction();
>>>
>>> If I migrate them to static inner class, would it be like this?
>>>
>>> Action action = ActionFactory.create(request.getAction()));
>>> action.doAction();
>>>
>>> klc
>>>
>>> On Tuesday, May 26, 2015 at 11:54:56 PM UTC+8, Nate Bauernfeind wrote:
>>>
>>>> What is it that you like about the pattern that you want to keep? Are
>>>> you looking for static inner classes? You can couple the pattern with an
>>>> assisted inject factory, or providers depending on your use case.
>>>>
>>>> public abstract class Action {
>>>>     public abstract double doAction();
>>>>
>>>>     public static class ADD extends Action {
>>>>         @Override
>>>>         public double doAction() { ... }
>>>>     }
>>>>
>>>>     public static class UPDATE extends Action {
>>>>         @Override
>>>>         public double doAction() { ... }
>>>>     }
>>>>
>>>>     public static class DELETE extends Action {
>>>>         @Override
>>>>         public double doAction() { ... }
>>>>     }
>>>> }
>>>>
>>>> Nate
>>>>
>>>> On Tue, May 26, 2015 at 7:06 AM klc <[email protected]> wrote:
>>>>
>>> Hi guys, thanks for all the reply before I have migrate my servlet
>>>>> application to guice, partly at least.
>>>>>
>>>>> I have a question about design, we use the enum template pattern a
>>>>> lot, like this:
>>>>>
>>>>> public enum Action {
>>>>>   ADD {
>>>>>     @Override
>>>>>     public double doAction() {...}
>>>>>   },
>>>>>   UPDATE {
>>>>>     @Override
>>>>>     public double doAction() {...}
>>>>>   },
>>>>>   DELETE{
>>>>>     @Override
>>>>>     public double doAction() {...}
>>>>>
>>>>>   public abstract double doAction();
>>>>>
>>>>> }
>>>>>
>>>>> This is great pattern and I have nothing against it, but you can't
>>>>> inject it into other class and can't inject anything into it.
>>>>> Is there a similar way to do the same, but injectable?
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "google-guice" group.
>>>>>
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>
>>>>
>>>>> Visit this group at http://groups.google.com/group/google-guice.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/google-guice/3f1c0641-b8c1-4391-aab7-81e8e05608d8%40googlegroups.com
>>>>> .
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "google-guice" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/google-guice.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/google-guice/a9aac798-6830-444e-b7b3-b9dd5744bbb2%40googlegroups.com
>>> <https://groups.google.com/d/msgid/google-guice/a9aac798-6830-444e-b7b3-b9dd5744bbb2%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "google-guice" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/google-guice.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/google-guice/CAHNex98jrAo6ibvQhc8T9N%3DixnuV6j5BfH-Pjzy5VsyFFHUM7Q%40mail.gmail.com
> <https://groups.google.com/d/msgid/google-guice/CAHNex98jrAo6ibvQhc8T9N%3DixnuV6j5BfH-Pjzy5VsyFFHUM7Q%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-guice/CAKCukAJc7RyCjJOyKakHGWGR8Y%3DgBAZVAfwV3c3LyLO-i79nsg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to