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. For more options, visit https://groups.google.com/d/optout.
