java - Create instances using one generic factory method -
i trying find easy extend way create objects @ runtime based on static string class attribute, called name.
how can improve code, uses simple if construct?
public class flowerfactory {  private final garden g;  public flowerfactory(garden g) {   this.g = g; }  public flower createflower(final string name) {     flower result = null;     if (rose.name.equals(name)) {        result = new rose(g);    } else if (oleander.name.equals(name)) {        result = new oleander(g);    } else if ... { ... } ...     return result; }   newinstance() can not used on these classes, unless remove constructor argument. should build map (map) of supported flower class references, , move contructor argument property setter method, or there other simple solutions?
background information: goal implement kind of 'self-registering' of new flower classes, flowerfactory.getinstance().register(this.name, this.class), means answers far introspection-based solutions fit best.
you can use reflection despite having constructor argument:
rose.class.getconstructor(garden.class).newinstance(g);   combined static name class mapping, implemented this:
// todo handle unknown name flowers.get(name).getconstructor(garden.class).newinstance(g);   where flowers populated in static initializer block:
static {   map<string, class<? extends flower>> map = new hashmap<string, class<? extends flower>>();   map.put(rose.name, rose.class);   // add flowers   flowers = collections.unmodifieablemap(map); }      
Comments
Post a Comment