java中排序實現簡單的策略模式

策略模式(Strategy Pattern)中體現了兩個很是基本的面向對象設計的原則
–封裝變化的概念
–編程中使用接口,而不是對接口的實現

策略模式的定義
–定義一組算法,將每一個算法都封裝起來,而且使它們之間能夠互換。
–策略模式使這些算法在客戶端調用它們的時候可以互不影響地變化

策略模式的編寫步驟
–1.對策略對象定義一個公共接口。
–2.編寫策略類,該類實現了上面的公共接口
–3.在使用策略對象的類中保存一個對策略對
象的引用。
–4.在使用策略對象的類中,實現對策略對象
的set和get方法(注入)或者使用構造方法完

成賦值java


java排序策略模式實現:算法

有這樣一個類:編程

public class Person {ide

private int id;this

private String name;spa

private int age;設計

}code

要求:假若有若干個類Person對象存在一個List當中,對他們進行排序,分別按照名字、對象

年齡、id 進行排序(要有正序與倒序兩種排序方式)。假如年齡或者姓名重複,按照id的正序進行排序。排序

如下爲實現源代碼。

類Person

package com.jack.SortStrategy; public class Person { private int id; private String name; private int age; public Person(int id,String name,int age){ this.id=id; this.age=age; this.name=name; } /** * @return the id */ public int getId() { return id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } }

類IdOrder

package com.jack.SortStrategy; import java.util.Comparator; public class IdOrder implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { // TODO Auto-generated method stub return o1.getId()-o2.getId(); } public String getMethodName() { return "按id正序"; } }

類IdReverseOrder

package com.jack.SortStrategy; import java.util.Comparator; public class IdReverseOrder implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { // TODO Auto-generated method stub return o2.getId()-o1.getId(); } public String getMethodName() { return "按id逆序"; } }

類AgeOrder

package com.jack.SortStrategy; import java.util.Comparator; public class AgeOrder implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { // TODO Auto-generated method stub int result=o1.getAge()-(o2.getAge()); if(0==result){ //若年齡相同按id排 return o1.getId()-o2.getId(); } return result; } public String getMethodName() { return "按年齡正序"; } }

類AgeReverseOrder

package com.jack.SortStrategy; import java.util.Comparator; public class AgeReverseOrder implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { // TODO Auto-generated method stub int result=o2.getAge()-(o1.getAge()); if(0==result){ //若年齡相同按id排 return o1.getId()-o2.getId(); } return result; } public String getMethodName() { return "按年齡逆序"; } }

NameOrder

package com.jack.SortStrategy; import java.util.Comparator; public class NameOrder implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { // TODO Auto-generated method stub int result=o1.getName().compareTo(o2.getName()); if(0==result){ //若姓名相同按id排 return o1.getId()-o2.getId(); } return result; } public String getMethodName() { return "按姓名正序"; } }

類NameReverseOrder

package com.jack.SortStrategy; import java.util.Comparator; public class NameReverseOrder implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { // TODO Auto-generated method stub int result=o2.getName().compareTo(o1.getName()); if(0==result){ //若姓名相同按id排 return o1.getId()-o2.getId(); } return result; } public String getMethodName() { return "按姓名逆序"; } }

類Client

package com.jack.SortStrategy; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; public class Client { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<Person> personList = new ArrayList<Person>(); personList.add(new Person(1, "zhangsan", 20)); personList.add(new Person(2, "lisi", 21)); personList.add(new Person(3, "wangwu", 25)); personList.add(new Person(4, "zhaoliu", 26)); personList.add(new Person(5, "chenqi", 28)); personList.add(new Person(6, "dongba", 10)); personList.add(new Person(7, "zhansan", 15)); personList.add(new Person(8, "liujiu", 26)); /* * 可經過這裏new不一樣的Comparator的實現從而實現不一樣的排序策略 * 分別有 * IdOrder:按Id正序 * IdReverseOrder:按Id逆序 * NameOrder:按姓名正序 * NameReverseOrder:按姓名逆序 * AgeOrder:按年齡正序 * AgeReverseOrder:按年齡逆序 */ Comparator<Person> comp = new IdOrder(); Collections.sort(personList, comp); System.out.println(((IdOrder)comp).getMethodName()+" 排序後的序列是:"); System.out.println("-----------------------"); for (Iterator<Person> itor=personList.iterator();itor.hasNext();) { Person p=itor.next(); System.out.println(p.getId() + " " +p.getName()+ " " + p.getAge()); } } }

執行Client能夠獲得排序的結果
相關文章
相關標籤/搜索