对Object数组中的Person对象,按某属性进行排序。具体的按某属性排序被抽象出来,形成策略。
Person类:
package com.flg.Strategy; import java.util.Comparator; /** * Created with IntelliJ IDEA. * User: fuliguo * Date: 12-8-12 * Time: 下午4:02 * 待排序类实现了Comparable接口 * 排序条件由具体策略决定,排序策略实现了Comparator接口 */ public class Person implements Comparable<Person>{ private String name;//姓名 private int age;//年龄 private int height;//身高 //请关注工厂模式博文,此处会换成工厂方法实现 //private Comparator comparator = new PersonAgeComparator();//按年龄排序 //private Comparator comparator = new PersonHeigthComparator();//按身高排序 private Comparator comparator = new PersonNameComparator();//按姓名排序 //请关注工厂模式博文,此处会换成工厂方法实现 public Person(String name, int age,int height) { this.name = name; this.age = age; this.height = height; } public Person(){} 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 getHeight() { return height; } public void setHeight(int height) { this.height = height; } @Override /** * 实现Comparable接口中的comparaTo方法 * 具体排序条件由对应策略实现 */ public int compareTo(Person o) { return comparator.compare(this,o);//根据什么排序,由具体策略实现决定 } }
按Person的年龄进行排序的策略,PersonAgeComparator类:
package com.flg.Strategy; import java.util.Comparator; /** * Created with IntelliJ IDEA. * User: fuliguo * Date: 12-8-12 * Time: 下午4:07 * 按Person的年龄进行排序的策略 */ public class PersonAgeComparator implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { return o1.getAge()-o2.getAge();//按年龄比较 } }
按Person的身高进行排序的策略,PersonHeightComparator类:
package com.flg.Strategy; import java.util.Comparator; /** * Created with IntelliJ IDEA. * User: fuliguo * Date: 12-8-12 * Time: 下午4:13 * 按Person的高度进行排序的策略 */ public class PersonHeigthComparator implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { return o1.getHeight()-o2.getHeight();//按高度比较 } }
按Person的名字进行排序的策略,PersonNameComparator类:
package com.flg.Strategy; import java.util.Comparator; /** * Created with IntelliJ IDEA. * User: fuliguo * Date: 12-8-12 * Time: 下午4:05 * 按Person的姓名进行排序的策略 */ public class PersonNameComparator implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { return o1.getName().compareToIgnoreCase(o2.getName());//按姓名排序 } }
测试类 Test类:
package com.flg.Strategy; import com.flg.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Created with IntelliJ IDEA. * User: fuliguo * Date: 12-8-12 * Time: 下午5:07 * 测试类 */ public class Test { public Object[] getObjects() { Object [] objects = new Object[]{ new Person("张三",22,188), new Person("赵六",19,210), new Person("王五",30,175), new Person("李四",10,158) } ; return objects; } /** * 控制台输出遍历Object数组对像顺序 * @param */ public void printObjects(Object [] objects) { Person p; for(int i=0;i<objects.length;i++){ p = (Person) objects[i]; System.out.println(p.getName()+"---"+p.getAge()+"---"+p.getHeight()); } } public static void main(String [] arg){ Test t = new Test(); Object [] objects = t.getObjects(); t.printObjects(objects); Arrays.sort(objects); System.out.println("******排序后******"); t.printObjects(objects); } }