Guys,
I believe there is a pattern for this ... this should be a very common issue:
I have an object who contains an attribute with say 3 possible values, I have to do something very dramatically different in 3 cases (while loop through a bunch of instances). Now even if I have the possible attribute values stored in a lookup table I still can't avoid the following codes:
for (Iterator it = list.iterator(); it.hasNext();) {
(MyObject)it.next();
String attr = myObject.getMyAttr();
if (attr.equals("CASE_A"))
doSomethingVeryA();
els if (attr.equals("CASE_B"))
doSomethingVeryB();
els if (attr.equals("CASE_C"))
doSomethingVeryC();
}
Let's say you just can not possiblly generalize doSomethingVeryX part, how do you get rid of the "if"s? Or is that asking (trying to archtect) too much....
-
Designing for a limited list (1 messages)
- Posted by: Sheng Tang
- Posted on: March 31 2006 17:22 EST
Threaded Messages (1)
- Designing for a limited list by Emil Kirschner on April 03 2006 05:32 EDT
-
Designing for a limited list[ Go to top ]
- Posted by: Emil Kirschner
- Posted on: April 03 2006 05:32 EDT
- in response to Sheng Tang
here we go:
public interface ObjectProcessor {
public void processObject(Object obj);
}
public class CaseAProcessor implements ObbjectProcessor....
public class CaseBProcessor implements ObbjectProcessor....
public class CaseCProcessor implements ObbjectProcessor....
Map processors = new HashMap();
proecssors.add("case A", new CaseAPRocessor());
proecssors.add("case B", new CaseBPRocessor());
proecssors.add("case C", new CaseCPRocessor());
for (Iterator it = list.iterator(); it.hasNExt();) {
ObjectProcessor proessor = processors.get(CASE);
processor.processObject(it.next());
}
this code wouldn't actually compile as is, but I think you'll get the idea. the map should be initialized somewhere in a static structure, at application startup.
hope it helps.
cheers,
emil ( http://www.thekirschners.com/software/testare/testare.html ) .