Strategy策略模式
来源:互联网 发布:项目管理平台软件 编辑:程序博客网 时间:2024/06/06 03:40
JDK中使用该模式的API:Comaprable接口
接口:Comparable
抽象方法:CompareTo(T obj);//1--->大于obj 0----->等于obj -1---->小于obj
使用:
任何一个对象想要排序或比较大小,需要先实例化Comparable接口。
然后重写CompareTo方法,定义对象比较大小的规则(如根据某个属性值比较大小)
局限性:
在CompareTo方法中,对象比较大小的规则是写死的,没办法更改多种比较条件。
@Override
public int compareTo(T obj){
//这里写死类obj和this的比较规则,不灵活
//只能根据obj的age属性来比较大小
if(obj.age > this.age)
return -1;
else if(obj.age == this.age){
return 0;
}else{
return 1;
}
}
若想要动态改变对象比较规则,需要用到JDK提供的比较器Comparator
--------------------------------------------------------------------------
接口:Comparator比较器
抽象方法:Compare(T obj1, T obj2);//1--->obj1大于obj2 0----->obj1等于obj2 -1---->obj1小于obj2
使用:
任何一个对象想要排序或比较大小,需要先实例化Comparator接口。
然后重写Compare方法,定义对象比较大小的规则(如根据某个属性值比较大小)
结合Comparable和Comparator的使用:
AgeComparator.java年龄比较器
//年龄比较器
public class AgeComparator implements Comparator{
@Override
compare(T obj1, T obj2){
//这里写比较逻辑的代码
if(obj1.age > obj2.age)
return -1;
else if(obj1.age == obj2.age){
return 0;
}else{
return 1;
}
}
}
HeightComparator.java身高比较器
//身高比较器
public class HeightComparator implements Comparator{
@Override
compare(T obj1, T obj2){
//这里写比较逻辑的代码
if(obj1.height > obj2.height )
return -1;
else if(obj1.height == obj2.height ){
return 0;
}else{
return 1;
}
}
}
XXXCompareble.java
public class XXXCompareble implements Comparable{
Comparator ageComparator = new AgeComparator();
Comparator heightComparator = new HeightComparator();
@Override
compareTo(T obj){
//直接使用Comparator比较器,需要哪种比较器就用哪种比较器,灵活
return ageComparator.compare(this,obj);
}
}
-----------------------------------------------------
策略模式的应用:
在Comparator比较器中,通过实例化Comparator接口来实现各种比较策略,如:
年龄比较策略,身高比较策略等。。。
如果没有使用策略模式,则compareTo方法被写死,不灵活。
在compareTo方法中使用Comparator的比较策略,灵活地扩展比较策略。
阅读全文
1 0
- 策略模式 Strategy模式
- Strategy模式 策略模式
- 策略模式(Strategy模式)
- 策略模式(Strategy Pattern)
- Strategy策略模式
- 策略(Strategy)模式
- Strategy策略模式
- 策略(Strategy)模式
- 策略模式(Strategy Pattern)
- 策略模式 Strategy Pattern
- 策略模式(Strategy Pattern)
- 策略模式(Strategy)
- HeadFirst Strategy策略模式
- 策略模式(Strategy Pattern)
- Strategy Pattern (策略模式)
- 泛化策略模式(Strategy)
- Strategy 策略模式
- Strategy 策略模式
- ART虚拟机特点与组件
- 阿里云数据盘扩容操作遇险记录
- 微信小程序--Loading组件
- AttributeError: '_csv.reader' object has no attribute 'next' 我在使用pyhon3.4运行以下代码时报错:AttributeError:
- spring 多线程事务的问题
- Strategy策略模式
- git学习笔记整理-6-远程仓库
- Python-分类问题示例-OneR-学习笔记
- 大理石在哪儿(Where is the marble?,UVa 10474)
- NYOJ 305 表达式求值
- 《linux程序设计》多线程学习
- barcodelib打印条码C#例子
- centos7下升级cmake,很简单
- Xcode8 中的retainCount