一道策略模式联系题,希望大侠们帮我做一下!! 要求:假如有若干个类Person对象存在一个List当中,对他们进行排序,分别按照名字、年龄、id进行排序(要有正序与倒序两种排序方式)。假如年龄或者姓名重复,按照id的正序进行排序。要求使用策略模式进行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这不是很简单吗?每种排序就是一种策略调用Collections.sort方法,比较器材用不同的策略返回即可 一个可能的设计,仅供参考:PersonManager类属性:List personList;Sorter sorter;方法:setSorter(Sorter s){ sorter = s;}getSortedList(){ return sorter.sort( personList);}Sorter接口方法:List sort(List input);SortViaNameAsc类,实现Sorter接口方法List sort(List input){ //用Name来升序排序 //如果Name一样,用ID正序排序} 一个接口 声明sort 作为抽象角色一堆类实现接口来分别实现你需要的排序策略类维护一个接口对象,用该接口对象调用sort如果你上面能看懂还写不出代码那只能说明代码功底不够,还需要多练 框架给你写好了 给你实现了一个按年龄的策略 其他的策略你自己加吧 这个你要是都不会那我也没什么说的了,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 数据库存取方式是用IO的方式实现的吗? Date dd=new date(1000)为什么会输出这样的信息? 我想问一个java中的反射一般用在项目的什么情况啊, Swing、SWT和JFace有什么区别啊? 各位大侠关于文本编辑器jedit安装问题 我是学java的新手 小弟发现一个很基础,但是不好玩的问题,关于switch控制结构的。 MySql数据库驱动有疑问! 在线求解,关于ASP数字验证问题。 请问jbuilder主要是用于那方面的开发的?(高分相送,up有分) 为什么调用了System.gc()后finalize()方法没有被调用呢? 数组元素交换。。有点迷糊
调用Collections.sort方法,比较器材用不同的策略返回即可
属性:
List personList;
Sorter sorter;
方法:
setSorter(Sorter s){
sorter = s;
}
getSortedList(){
return sorter.sort( personList);
}Sorter接口
方法:
List sort(List input);SortViaNameAsc类,实现Sorter接口
方法
List sort(List input){
//用Name来升序排序
//如果Name一样,用ID正序排序
}
一堆类实现接口来分别实现你需要的排序
策略类维护一个接口对象,用该接口对象调用sort
如果你上面能看懂还写不出代码那只能说明代码功底不够,还需要多练
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