策略模式----之Comparator
来源:互联网 发布:带着淘宝混异界 编辑:程序博客网 时间:2024/05/05 12:48
说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者都吃饱撑着没事做吗?
再谈Comparator接口之前,大家应该先了解一个叫“策略模式”的东东。一下是百度百科对策略模式的描写:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)
之所以要谈到策略模式,就是因为Comparator接口其实就是一种策略模式的实践。实现Comparator接口的类必然就会实现一个compareTo(Object o1, Object o2)的方法,而这个方法就是算法中的一部分,所有使用了compareTo方法的类都不会关心compareTo是如何工作的,只关心他的返回值,这也是面向对象中著名的封装特性。
那Comparator接口应该如何使用呢?别急,首先我们要先对Person类进行一下处理,因为我们现在使用Comparator接口,所以Comparable接口就可以光荣的退休了:
1: public class Person {
2:
3: private String name;
4: private int age;
5:
6: public Person() {
7:
8: }
9:
10: public Person(String name, int age) {
11: this.name = name;
12: this.age = age;
13: }
14:
15: public String getName() {
16: return name;
17: }
18:
19: public void setName(String name) {
20: this.name = name;
21: }
22:
23: public int getAge() {
24: return age;
25: }
26:
27: public void setAge(int age) {
28: this.age = age;
29: }
30:
31: @Override
32: public String toString() {
33: return "Person [age=" + age + ", name=" + name + "]";
34: }
35:
36: }
新建一个实现Comparator的实现类PersonComparator:
1: import java.util.Comparator;
2:
3: public class PersonComparator implements Comparator<Person> {
4:
5: @Override
6: public int compare(Person p1, Person p2) {
7: if (p1.getAge() > p2.getAge()) {
8: return 1;
9: } else if (p1.getAge() < p2.getAge()) {
10: return -1;
11: }
12: return 0;
13: }
14:
15: }
然后再用回我们的CompareTest做测试:
1: import java.util.Arrays;
2:
3: public class CompareTest {
4:
5: public static void main(String[] args) {
6: Person[] persons = {
7: new Person("P1", 60),
8: new Person("P2", 20),
9: new Person("P3", 40)
10: };
11:
12: System.out.println(Arrays.toString(persons));
13:
14: Arrays.sort(persons, new PersonComparator());
15:
16: System.out.println(Arrays.toString(persons));
17: }
18:
19: }
注意:在上面的sort方法中,我们传进了一个PersonComparator的实例对象作为参数,读者也可以试试不传入这个参数,看是否能正确工作。
结果当然是跟上面演示的例子一样啦,我就不再重复了。
- 策略模式----之Comparator
- 设计模式之策略模式(Strategy)&&Comparable、Comparator接口
- 简单模拟Comparator-策略设计模式
- 策略模式(Comparator和Comparable区别)
- java中Comparable接口以及Comparator策略模式的应用
- 从java的Comparable和Comparator接口学习策略模式
- Strategy设计模式之Comparable&Comparator接口
- 策略模式之我见
- 策略模式之我见
- 提高班之策略模式
- Unity3d之策略模式
- Unity3d之策略模式
- Unity3d之策略模式
- 设计模式之策略
- java之策略模式
- 设计模式之策略
- 设计模式之策略
- GOF之策略模式
- 了撒抠脚大汉噶上课的声卡绝对够
- 搜索引擎,读《数学之美》
- 叉姐的Noip模拟题
- [Unreal3美术]针对性能和内存的优化办法
- 【科普】基础教程系列之装系统篇
- 策略模式----之Comparator
- 校园招聘--奇虎360笔试
- IO口模拟SPI总线
- VMware中遇到的一些问题
- web安全之xss 攻击
- HBase业务实践
- linux下打开windows文件乱码的解决
- 模拟->YY POJ 1786
- 函数、指针、数组