2

私はインターフェースを持っていますSerializableItemこのクラスには、アプリケーションのサブクラスごとにメソッドがあります。ただし、実装するすべてのクラスSerializableにメソッドの適切な実装があるわけではありませんserialize。一部のシリアライザーは、アプリケーションのセキュリティ上の制約のために、すべての異なるオブジェクトをシリアル化できないはずです。

これをどのように解決すればよいですか?「セキュリティ上の制約のため、Serializerはオブジェクトをシリアル化できません」というメッセージをシリアル化する必要があります。または、RuntimeExceptionをスローする必要がありますか?または、これを「修正」する他の方法はありますか?

4

3 に答える 3

2

ロジックで 1 つの重要な原則に違反することになります:インターフェイス分離の原則

インターフェイス分離の原則では、クライアントが使用しないインターフェイスの実装を強制されるべきではないと述べています。1 つの大きなインターフェイスの代わりに、それぞれが 1 つのサブモジュールを提供するメソッドのグループに基づく多くの小さなインターフェイスが優先されます。

したがって、要件を達成するために、2 つの異なる基本クラスを作成します。

  • Item
  • SerializableItem

訪問者はオブジェクトのみに依存しSerializableItemます。

public void visit(SerializableItem sItem) 

もちろん、訪問者がそれを処理しない限り、両方のクラスの共通の動作 (シリアル化とは無関係)のみを一種の 内に収集することは可能です。AbstractItem

于 2012-11-18T19:02:09.333 に答える
0

投げUnsupportedOperationException("Non serializable")は初見です。もちろん、コンパイル時にそれを発見できれば素晴らしいことですが、Visitor パターンはそのように設計されていません。

于 2012-11-18T18:51:17.400 に答える
0

合理的な実装を提供しないクラスは、それを実装Serializableすべきではありません。とにかく、質問はかなり不明確です。インターフェイスはセットアップでメソッドをSerializable宣言していaccept()ますか? すべきではありません。シリアル化できないアイテムがアイテムの特別なサブクラスである可能性がある場合はvisit(MyNotSerializableItem)、ビジターに実装できません。

于 2012-11-18T18:53:25.487 に答える