第21条:用函数对象表示策略

来源:互联网 发布:旅游网络投诉举报平台 编辑:程序博客网 时间:2024/05/24 04:15

函数对象

        引入情景:不像c语言等语言,Java没有提供函数指针。所以要实现相同的功能就要用到“函数对象”。

        解释:调用对象的方法通常就是执行该对象(that object)上的某项操作。然而也可以定义这样的对象,他的方法执行其他对象(other object)上的操作。

        如果一个类仅仅导出这样一个方法,他的实例就等同于指向该方法的指针。这样的实例被称为函数对象(function object)。

        图解:

    应用:函数指针(函数对象)的主要用途就是实现策略模式。参看http://blog.csdn.net/nasebanaru/article/details/18942103 我们知道实现Comparator接口的类的对象就是函数对象(由该对象指向compare()方法)。

    补充:当一个具体策略只被使用一次时,通常使用匿名类来声明和实例化这个具体策略类。


Collections.sort(list,new Comparator<String>() {@Overridepublic int compare(String arg0, String arg1) {// TODO Auto-generated method stubreturn 0;}});

当一个具体策略类是设计用来重复使用的时候,他的类通常就要被实现为私有的静态成员类,并通过共有的静态final域导出(策略接口类型)。

class Host{private static class StrLenCmp implements Comparator<String>{@Overridepublic int compare(String o1, String o2) {// TODO Auto-generated method stubreturn 0;}}public static final Comparator<String> COMPARATOR=new StrLenCmp();}
第二段代码在实际中的应用就是String类的CASE_INSENSITIVE_ORDERy域:Arrays.sort(a1,String.CASE_INSENSITIVE_ORDER);  具体策略类被定义为了一个常量对象。

1 0
原创粉丝点击