昆明java培训
达内昆明广州春城路

18487146383

热门课程

java的策略模式结合简单工厂模式

  • 时间:2016-10-19
  • 发布:昆明Java培训
  • 来源:达内新闻

昆明Java培训班的老师原来已经讲过简单工厂模式了,对于Custom类中的checkVocationDays方法中的多个ifelse判断,可以使用简单工厂模式来进行改进,创建简单工厂如下:

public class CalDaysFactory {

private CalDaysFactory(){}

public static VacationDays create(int workYears){

if(workYears >= 20){

return new FiftenDays();

}else if(workYears >= 10){

return new TenDays();

}else if(workYears >= 1){

return new FiveDays();

}else{

return new NoneHoliday();

}

}

}

此时,我们的Custom类中的checkVocationDays方法就可以简化为如下所示的方式:

public void checkVocationDays(int workYears,int nowCompanyYears){

days = CalDaysFactory.create(workYears);//简单工厂模式

}

其他代码保持不变,这样我们的上下文类也就是Custom类中就不需要再去根据ifelse进行判断,将判断的工作转移到简单工厂中去;

使用简单工厂模式后,虽然将ifelse的判断转移到简单工厂中去了,但是在添加新的策略时还需要修改添加判断语句,同样是对修改开放的,昆明Java培训班的老师使用了反射的方法消除添加新的策略时要修改工厂类的弊端,但是有一个问题是与具体的策略类耦合严重,客户端必须知道策略类中具体的算法才能调用,如下所示:

public class ReflectFactory {

public static VacationDays create(Class<?> cla){

VacationDays product = null;

try {

product = (VacationDays) cla.newInstance();

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return product;

}

}

如果使用上述的简单工厂,那么我们的Custom类就变成了如下所示:

public void checkVocationDays(int workYears){

if(workYears < 1){

days = ReflectFactory.create(NoneHoliday.class);

}else if(workYears >= 1 && workYears < 10){

days = ReflectFactory.create(FiveDays.class);

}else if(workYears >= 10 && workYears < 20){

days = ReflectFactory.create(TenDays.class);

}else if(workYears >= 20){

days = ReflectFactory.create(FiftenDays.class);

}

}

虽然功能没有发生变化,但是还是需要进行ifelse判断,并没有彻底消除,只不过是判断的位置又回到了Custom类而已。

下一期我们亲爱的昆明Java培训班的老师还会继续给大家讲策略模式的消除判断。

上一篇:java之策略模式
下一篇:策略模式中怎么注解消除判断语句

昆明Java培训班《Java分布式数据库的未来》

昆明java培训班:为什么java工程师薪资这么高?

昆明java培训班:你所不知道的java秘密

昆明java培训班;如何认识Java Web技术

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货