策略模式Strategy

首先说一下开闭原则:对拓展放开,对修改关闭。
灵活是程序的必要条件,也就是说处理同一件事情,怎样更加全面,更加灵活,实现高内聚,低耦合。
策略模式
多个对象处理一个请求,选择最合适的策略。就好像你找对象,在人群中就是因为她多看了你一眼~~~
举例说明
对象进行比较。
1.假如几个集合里面有N个对象,我们按照对象的年龄排序,被排序的类实现Comparable接口 重写CompareTo方法定义比较规则。

1.创建类实现Comparable接口,泛型写类
	public class Person implements Comparable<Person> {
2.在类里面重写comparableTo
	public int compareTo(Person o) {
			return this.age - o.age;
		}
 重写toString方便遍历
3.测试:
  public class StudentTest {
	public static void main(String[] args) {
		Person[] a = new Person[4];
		a[0] = new Person(10, "曹操", "男", 2, 91);
		a[1] = new Person(13, "刘备", "男", 4, 92);
		a[2] = new Person(19, "孙权", "男", 3, 90);
		a[3] = new Person(9, "许褚", "男", 1, 82);
		//请注意,此时是一个参数
		Arrays.sort(a); 
		for (Person person : a) {
			System.out.println(person);
		}
	}
}

这种实现方式可以完成对象的比较并排序,但是缺点是耦合度太高,假设我现在换成序号排序,又要回到这个类中,重新定义比较规则。怎么解决呢?=====》比较器

和Compareble不同的是,比较器可以直接采用匿名内部类的形式,直接在sort方法中新增比较规则,很灵活,如果按照序号排序,直接修改方法中的比较规则即可。

1.创建person类,创建成员,重写toString方法,以便遍历
2.测试类:
 public class PersonTest {
	public static void main(String[] args) {

		Person[] p = new Person[4];
	
		p[0] = new Person("曹操", 20, 99, 1, "男");
		p[1] = new Person("孫權", 18, 90, 4, "男");
		p[2] = new Person("劉備", 28, 91, 2, "男");
		p[3] = new Person("關羽", 19, 89, 3, "男");
		//这里采用匿名内部类的形式,省去了实现类的步骤。
		Arrays.sort(p, new Comparator<Person>() {
			public int compare(Person o1, Person o2) {
			//升序反之降序
				return o1.getAge() - o2.getAge();
			}
		});
		for (Person person : p) {
			System.out.println(person);
		}
	}
}

匿名内部类(匿名内部类的本质是对象)直接定义比较规则。灵活,对象里的属性灵活定义,Comparable是写死在实现类的ComparaTo方法里,只能实现单一的比较。
注意:集合的比较底层也是转换成对象数组来比较.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值