如何借助“策略模式”才能避免程序中的if else
如何避免使用if else语句,这是个问题困扰自己很久了。
看过不少文章,貌似使用策略模式是较好的解决方法。
但是使用策略模式针的就能够避免if else吗?
?
一 首先我们假设一个场景。有这样一个txt文件。
?
??2 然后开始简单策略模式
?
import java.io.IOException;import java.util.HashMap;import java.util.List;import com.aovid.dao.SlaveDao;import com.aovid.mould.Slave;import com.aovid.type.Calculater;import com.aovid.type.CalculaterA;import com.aovid.type.CalculaterB;import com.aovid.type.CalculaterC;import com.aovid.type.CalculaterD;public class SlaveService {private HashMap<String, Class> map;{map = new HashMap<String, Class>();map.put("A", CalculaterA.class);map.put("B", CalculaterB.class);map.put("C", CalculaterC.class);map.put("D", CalculaterD.class);}public void showSalary() throws IOException, InstantiationException,IllegalAccessException {SlaveDao slaveDao = new SlaveDao();List<Slave> slaveList = slaveDao.receiveAll();for (Slave s : slaveList) {s.setSalary(calculateByType(s));System.out.println(s);}}private int calculateByType(Slave s) throws InstantiationException,IllegalAccessException {Class calcuater = map.get(s.getType());if (calcuater != null) {Calculater c = (Calculater) calcuater.newInstance();return c.calculateSalary(s);}return 0;}private int calculateByType_old(Slave s){switch (key) {case value:break;default:break;}return 0;}}??注:为了让代码简单把所有的异常 都扔出去了。没做啥处理。
?
其实,看了很多关于避免使用if else和switch语句的东西,里面常常涉及到想策略模式。但是一直不明白向上面红色部分提及的如果判断的问题。
?
希望,高人帮我解答一二。
?
?
1 楼 bxf12315 2011-01-20 晕了,怎么能吧这篇文章转到论坛里啊!