日期:2014-05-20  浏览次数:20872 次

一道策略模式联系题,希望大侠们帮我做一下!!
要求:假如有若干个类Person对象存在一个List当中,对他们进行排序,分别按照名字、年龄、id进行排序(要有正序与倒序两种排序方式)。假如年龄或者姓名重复,按照id的正序进行排序。要求使用策略模式进行。

------解决方案--------------------
框架给你写好了 给你实现了一个按年龄的策略 其他的策略你自己加吧 这个你要是都不会那我也没什么说的了,[code=Java][/code]
package Strategy;

public class Person {
int id;
String name;
int age;
public Person(int id,String name ,int age){
this.id=id;
this.age=age;
this.name=name;
}

}


package Strategy;

import java.util.ArrayList;

public class SortPersonList {
private ArrayList<Person> list=new ArrayList<Person>();
private AbstractStrategy as;
public SortPersonList(AbstractStrategy as){
this.as=as;

}
public void setList(ArrayList<Person> list){
this.list=list;
as.setList(list);
}
public void getInorde(){
list=as.getInorder();
}
public void getReverse(){
list=as.getReverse();
}
public void display(){
for(Person p:list){
System.out.println(p.name+" "+p.id+" "+p.age );
}
}

}

package Strategy;

import java.util.ArrayList;

public abstract class AbstractStrategy {
protected ArrayList <Person> list=new ArrayList<Person>();

public AbstractStrategy(){};
public void setList(ArrayList<Person> list){ this.list=list;}


public AbstractStrategy(ArrayList<Person> list){
this.list=list;
}
abstract ArrayList<Person> getInorder();
abstract ArrayList<Person> getReverse();

}

package Strategy;

import java.util.ArrayList;
import java.util.*;

public class AgeStrategy extends AbstractStrategy {
public AgeStrategy(){};


public AgeStrategy(ArrayList<Person> list) {
super(list);
}

@Override
ArrayList<Person> getInorder() {
Collections.sort(list,new AgeComparator());
return list;
}

@Override
ArrayList<Person> getReverse() {
Collections.sort(list,new AgeComparator());
Collections.reverse(list);
return list;
}

}


package Strategy;

import java.util.Comparator;

public class AgeComparator implements Comparator<Person>{


public int compare(Person p1, Person p2) {
if(p1.age>p2.age)
return 1;
else if(p1.age<p2.age)
return 0;
else if(p1.id>p2.id)
return 1;
else return 0;

}

}


package Strategy;

import java.util.ArrayList;

public class Client {
static void process(){
AbstractStrategy as=new AgeStrategy();
SortPersonList spl=new SortPersonList(as);
Person p1=new Person(1,"小明",10);
Person p2=new Person(2,"小刚",10);
Person p3=new Person(3,"小亮",8);
ArrayList<Person> list=new ArrayList<Person>();
list.add(p1);
list.add(p2);
list.add(p3);
spl.setList(list);
System.out.println("原始链表");
spl.display();
spl.getInorde();
System.out.println("排序后");
spl.display();
System.out.println("逆序后");
spl.getReverse();
spl.display();
}
public static void main(String [] args){
Client.process();
}


}
运行结果

原始链表
小明 1 10
小刚 2 10
小亮 3 8
排序后
小亮 3 8
小明 1 10
小刚 2 10
逆序后
小刚 2 10
小明 1 10
小亮 3 8