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

18487146383

热门课程

java之策略模式

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

昆明Java培训班的老师这一期给大家讲java之策略模式。

定义

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

策略模式把一系列的算法分别封装到对应的类中,这些类都实现了相同的接口,并且各个类相互之间可以进行互换,算法类实现的接口称之为抽象策略类,通过在上下文类中包含抽象策略类实现对各个策略的调用,通过这种方式,可以达到修改策略类或者添加策略类时不会影响客户端调用程序的目的。

实例解析

情景

十一刚过完,今年的假期也就是春节的年假了,根据国家规定,工作年限不同,年假的时间也不同,现在的需求就是给你公司所有员工的工作年限,求出各个员工的年假天数(不考虑提前请年假之类的情况);

实现

使用策略模式,首先需要一个抽象策略类,通常是一个接口或者抽象类,在抽象策略类中说明要实现的功能;

package com.strategy;

public interface VacationDays {

public int getVacationDays();

}

具体的策略类,也就是具体的算法,具体的算法类需要实现抽象策略类

package com.strategy;

public class NoneHoliday implements VacationDays{

@Override

public int getVacationDays() {

System.out.println("工作不满一年,没有年假");

return 0;

}

}

package com.strategy;

public class FiveDays implements VacationDays{

@Override

public int getVacationDays() {

System.out.println("工作1到10年,年假5天");

return 5;

}

}

package com.strategy;

public class TenDays implements VacationDays{

@Override

public int getVacationDays() {

System.out.println("工作10到20年,年假10天");

return 10;

}

}

package com.strategy;

public class FiftenDays implements VacationDays{

@Override

public int getVacationDays() {

System.out.println("工作满20年,年假15天");

return 15;

}

}

上下文类(环境类),持有一个抽象策略类的引用,最终给客户端调用

public class Custom {

private VacationDays days;

public void checkVocationDays(int workYears){

if(workYears < 1){

days = new NoneHoliday();

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

days = new FiveDays();

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

days = new TenDays();

}else if(workYears >= 20){

days = new FiftenDays();

}

}

public int calcateDays(){

return days.getVacationDays();

}

}

客户端调用测试

public class Test {

public static void main(String[] args) {

Custom c= new Custom();

c.checkVocationDays(25);

c.calcateDays();

c.checkVocationDays(3);

c.calcateDays();

c.checkVocationDays(0);

c.calcateDays();

}

}

昆明Java培训班的老师总结一下

通过以上的实现方式,客户端不再依赖于具体的策略类,而是依赖于抽象策略类,在客户端只需要传入公司员工的工作年限就可以轻松的求出各个员工的年假天数,此时即使国家政策改变,不同工作年限的年假天数改变也不需要修改客户端的调用程序,只需要修改对应策略类的具体算法就可以了。

上一篇:【昆明Java培训班】JavaWeb总结
下一篇:java的策略模式结合简单工厂模式

AI初创企谷歌跑在前面了!达内java培训

‘资产荒’为什么这么说?【达内培训】

java集合-Iterator迭代

阿里云澳门战略携手创“城市大脑”——达内编程培训

选择城市和中心
贵州省

广西省

海南省

台湾