ServiceLoad 应用(链式编程:统一执行某一类功能、、分支语句优化)
周计划安排;“工作日(周一到周五):去工作;周六:锻炼身体;周日:休息;”
若用代码完成上述内容该怎么做?
这样吗?很显然是可以实现。
但是这样不是个好的实现方式。。。。。。(没有什么扩展性,如果需求调整就得修改调用方法)
接下来介绍另外一种实现方式:
/**
* 周计划 接口
*/
public interface WeeksPlan {
/**
* 获取哪一天
*
* @return
*/
Day getDay();
void doTing();
public enum Day {
WORK,//工作日
STA,//周六
SUN//周日
}
}
/**
* 工作日.
*/
public class WorkingDays implements WeeksPlan {
@Override
public Day getDay() {
//工作日
return Day.WORK;
}
@Override
public void doTing() {
System.out.println("上班 ing。。。。");
}
}
/**
* 周六 健身
*/
public class Saturday implements WeeksPlan {
@Override
public Day getDay() {
//周六
return Day.STA;
}
@Override
public void doTing() {
System.out.println("健身 。。。");
}
}
/**
* 周日休息
*/
public class Sunday implements WeeksPlan {
@Override
public Day getDay() {
//周日
return Day.SUN;
}
@Override
public void doTing() {
System.out.println("休息 。。。");
}
}
增加配置文件:
客户端调用:
import java.util.ServiceLoader;
/**
* 执行计划
*/
public class ExecutePlan {
public static void main(String[] args) {
exe();
}
private static void exe() {
//周计划
ServiceLoader<WeeksPlan> weeksPlans = ServiceLoader.load(WeeksPlan.class);
for (WeeksPlan plan : weeksPlans) {
System.out.print(plan.getDay() + ":");
plan.doTing();
}
}
}
结果:
总结:
1,计划功能类结构清晰;如果需要细化到每一天的计划,只需要增加几个类即可;
2,易于调整;若计划改变,周日"休息"调整为“聚餐” 仅仅需要调整对应的功能实现类即可,不用修改调用方;