课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > Java程序员的日常:基于类的策略模式
  • Java程序员的日常:基于类的策略模式

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

  • 昆明Java培训班的老师发现,effective java通过函数来作为策略,今天昆明Java培训班的老师就来给大家讲讲。

    通过函数作为策略有两个要注意的地方:

    使用接口作为策略传入

    如果长期调用,应该设置为静态内部类,避免频繁创建过多的匿名对象

    下面举个简单的例子,针对Engineer类提供不同的策略做排序,比如按照年龄或者按照员工级别:

    class Engineer{

    private String name;

    private int age;

    private int level;

    public Engineer(String name,int age,int level) {

    this.name = name;

    this.age = age;

    this.level = level;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public int getAge() {

    return age;

    }

    public void setAge(int age) {

    this.age = age;

    }

    public int getLevel() {

    return level;

    }

    public void setLevel(int level) {

    this.level = level;

    }

    }

    public class Strategy {

    public static final Comparator<Engineer> AGE_ORDER = new AgeComparator();

    public static final Comparator<Engineer> LEVEL_ORDER = new LevelComparator();

    private static class AgeComparator implements Comparator<Engineer>{

    @Override

    public int compare(Engineer e1, Engineer e2) {

    return e1.getAge()-e2.getAge();

    }

    }

    private static class LevelComparator implements Comparator<Engineer>{

    @Override

    public int compare(Engineer e1, Engineer e2) {

    return e1.getLevel()-e2.getLevel();

    }

    }

    public static void main(String[] args) {

    List<Engineer> el = new ArrayList<>();

    el.add(new Engineer("zhangsan", 26, 3));

    el.add(new Engineer("lisi", 30, 2));

    el.add(new Engineer("wangwu", 28, 1));

    Collections.sort(el,AGE_ORDER);

    System.out.println(JSON.toJSON(el));

    Collections.sort(el,LEVEL_ORDER);

    System.out.println(JSON.toJSON(el));

    }

    }

    在上面昆明Java培训班的老师讲的例子中,采用静态成员变量声明,可以在多次使用的时候节省创建对象的成本。而且静态成员在堆内存的分配上也更简单,不会每次都创建新的对象。

    在真实的场景中,是在某个请求方法里面,返回一个List对象,需要对它按照日期排序。如果是普通的Collections.sort(list,new Comparator<xx>{})这种方式,会在每次返回结果的时候,都创建一个匿名类,很显然会浪费不少内存空间,增加垃圾回收的压力。使用静态成员变量的方式,可以减少这种不必要的浪费。

    了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:java程序员:覆盖equals时总要覆盖hashcode

下一篇:java程序员的日常:List与List

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址: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