我正在阅读有效的 Java。在讨论使用函数对象作为策略的部分中,存在以下段落。
因为策略接口用作其所有具体策略实例的类型,所以不需要公开具体策略类来导出具体策略。相反,“宿主类”可以导出类型为策略接口的公共静态字段(或静态工厂方法),具体策略类可以是宿主的私有嵌套类
// Exporting a concrete strategy
class Host {
private static class StrLenCmp
implements Comparator<String>, Serializable {
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
}
// Returned comparator is serializable
public static final Comparator<String>
STRING_LENGTH_COMPARATOR = new StrLenCmp();
... // Bulk of class omitted
}
我的问题是,使用上述方式有什么特别的优势吗?通过公开具体战略来输出战略有什么问题?