课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > java之策略模式
  • java之策略模式

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

  • 昆明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的策略模式结合简单工厂模式

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56