访问者模式,并非所有访问者都对接口中的所有方法都有合理的实现

时间:2012-11-18 18:46:40

标签: java java-ee visitor-pattern

我有一个界面Serializable。这个类在我的应用程序中有每个Item子类的方法。但是,并非所有实现Serializable的类都具有serialize方法的合理实现。由于我的应用程序中存在安全限制,因此某些序列化程序不能序列化所有不同的对象。

我该如何解决这个问题?我应该序列化一条消息,上面写着“由于安全限制,Serializer无法序列化对象。”或者我应该抛出RuntimeException吗?还是有其他方法来“修复”这个?

3 个答案:

答案 0 :(得分:2)

你会违反一个重要原则:Interface Segregation Principle

  

接口隔离原则指出客户不应该这样做   被迫实现他们不使用的接口。而不是一个胖子   接口许多小接口是基于组的首选   方法,每个方法服务一个子模块。

因此,我会创建两个不同的基类来实现您的要求:

  • Item
  • SerializableItem

您的访问者只会依赖SerializableItem个对象:

public void visit(SerializableItem sItem) 

当然,只要访问者不处理,就可以在一类AbstractItem内收集两个类的常见行为(与序列化无关)。它。

答案 1 :(得分:0)

投掷UnsupportedOperationException("Non serializable")是第一个猜测。当然,在编译时发现它是很棒的,但访问者模式不是为此而设计的。

答案 2 :(得分:0)

不能为Serializable提供合理实现的类不应实现它。无论如何,这个问题还不清楚。界面Serializable是否在您的设置中声明了accept()方法?它不应该。如果可以将不可序列化的项目作为项目的特殊子类,则您可能无法在访问者中实现visit(MyNotSerializableItem)