在C语言中,支持函数指针,而在java中,省略了它,因为对象的引用可以被用于提供同样的功能。
我们在设计具体策略类的时,需要定义一个策略接口,下面以Comparator接口为例
public interface{
public int compare(Object o1, Object o2);
}
如果一个策略类只被使用给一次,那么通常使用匿名类来声明和实例化这个具体的策略类,如:
Arrays.sort(stringarray, new Comparator(){
public int compare(Object o1, Object o2){
String s1 = (String)o1;
String s2 = (String)o2;
return s1.lenth() - s2.lenth();
}
});
如果一个策略类需要被多次使用,并且因为策略类是用来方法的调用,大多没有状态,即没有域,我们可以将其定义为singleton比较合适。下面是将这个类定义为私有类,通过一个公有静态final域导出
class Host{
private static class StrLenCmp implements Comparator, Serializable{
public int compare(Object o1, Object o2){
String s1 = (String)o1;
String s2 = (String)o2;
return s1.length() - s2.length();
}
}
public static final Comparator STRING_LENGTH_COMPARATOR = new StrLenCmp();
}