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

18487146383

热门课程

Java程序员的日常:基于类的策略模式

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

昆明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分布式数据库的未来》

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

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

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

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货