对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);
}
}
分享到:
相关推荐
java设计模式--策略模式 HeadFirst书中的 装饰者模式
第 1 章 策略模式【Strategy Pattern】 刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题, 嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看...
JAVA-设计模式-行为型模式-策略模式
设计模式--策略模式java例子
java常用设计模式-策略模式
此代码简单的模拟了超市的促销策略,有打折、返钱等操作!针对商场中出现的各种各样的促销策略,很方便的便可实现策略的拓展!
Java设计模式,策略模式的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂
设计模式-策略模式(Strategy)结合Android小知识讲解,简单明了
java设计模式,设计模式公司出品。策略模式,代理模式,单例模式,多例模式,工厂模式,门面模式等。
JAVA设计模式例程-策略模式,在项目中除工厂模式外就数策略模式用得最多了。源程序,可以研究下。不过没有反射,策略模式结合反射的话,基本上就是一个插件架构。可扩展性超强。
设计模式--策略模式StrategyPattern
JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...
设计模式--工厂模式java例子
55-Java设计模式之策略模式与状态模式1
1.1 创建型模式 4 1.1.1 工厂方法 4 1.1.2 抽象工厂 6 1.1.3 建造者模式 10 1.1.4 单态模式 13 1.1.5 原型模式 15 1.2 结构型模式 17 ...1.3.9 策略模式 61 1.3.10 模板方法 63 1.3.11 访问者模式 65
Java设计模式教程——策略模式Java开发Java经验技巧共13页.pdf.zip
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
策略模式通过定义一组可互换的算法(即策略),将每个算法封装成相应的策略类。这样客户端可以根据需要选择不同的策略,并且能够灵活地切换和扩展策略,而不需要修改原有的代码逻辑。策略模式能够提高代码的灵活性、...