I can appreciate the value of factory methods, but I'm struggling with the value of using dedicated factory classes.
This will work:
class Brady { int age; String name; static Brady create(String who) { if(who.equals("Cindy")) return new Cindy(); if(who.equals("Jan")) return new Jan(); if(who.equals("Marcia")) return new Marcia(); return null; } } class Marcia extends Brady {} class Cindy extends Brady {} class Jan extends Brady {} ... Jan jan = (Jan)Brady.create("Jan"); So is there any good reason to use a factory class instead?
class Brady { int age; String name; } class Marcia extends Brady {} class Cindy extends Brady {} class Jan extends Brady {} class BradyFactory { static Brady create(String who) { if(who.equals("Cindy")) return new Cindy(); if(who.equals("Jan")) return new Jan(); if(who.equals("Marcia")) return new Marcia(); return null; } } Jan jan = (Jan)BradyFactory.create("Jan"); It just seems like a waste of additional code. I do understand the usefulness of a factory class when an instance is needed:
class BradyFactory { Brady brady; BradyFactory(String who) { if(who.equals("Cindy")) brady = new Cindy(); else if(who.equals("Jan")) brady = new Jan(); else if(who.equals("Marcia")) brady = new Marcia(); } public BradyFactory addChore(Chore chore) { brady.addChore(chore); return this; } Brady create() { return brady; } } Jan jan = (Jan)new BradyFactory("Jan") .addChore(Chore.Dishes) .addChore(Chore.Washing) .create(); ...or when a subclass of the Factory is needed.
So my question is: is there any value to putting simple factory methods in a dedicated factory class other than when an instance of the factory, or a factory subclass, is needed?