私はEffectiveJavaを読んでいます。関数オブジェクトを戦略として使用することについて説明しているセクションには、以下の段落があります。
戦略インターフェースは、そのすべての具体的な戦略インスタンスのタイプとして機能するため、具体的な戦略をエクスポートするために具体的な戦略クラスを公開する必要はありません。代わりに、「ホストクラス」は、タイプが戦略インターフェイスであるパブリック静的フィールド(または静的ファクトリメソッド)をエクスポートでき、具象戦略クラスは、ホストのプライベートネストクラスにすることができます。
// 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
}
私の質問は、上記の方法を使用することの特別な利点はありますか?具体的な戦略を公開して戦略をエクスポートすることの問題点は何ですか?