一道策略模式联系题,希望大侠们帮我做一下!!
要求:假如有若干个类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