簡體   English   中英

訪問者模式,並非所有訪問者對接口中的所有方法都有合理的實現

[英]Visitor pattern, not all visitors have a reasonable implementations for all methods in the interface

我有一個接口Serializable 這個類有我的應用程序中每個Item子類的方法。 然而,並非所有實現Serializable類都有對serialize方法的合理實現。 由於我的應用程序中的安全限制,一些序列化程序不應該能夠序列化所有不同的對象。

我應該如何解決這個問題? 我是否應該序列化一條消息,指出“由於安全限制,序列化程序無法序列化對象。” 還是應該拋出 RuntimeException? 還是有其他方法可以“解決”這個問題?

您的邏輯會違反一項重要原則:接口隔離原則

接口隔離原則指出,不應強迫客戶端實現他們不使用的接口。 不是一個胖接口,許多基於方法組的小接口是首選的,每個接口服務一個子模塊。

因此,我將創建兩個不同的基類來滿足您的要求:

  • Item
  • SerializableItem

您的訪問者只會依賴SerializableItem對象:

public void visit(SerializableItem sItem) 

當然,只要訪問者不處理它,就可以在一種AbstractItem收集兩個類的共同行為(因此與序列化無關)。

拋出UnsupportedOperationException("Non serializable")是第一個猜測。 當然,在編譯時發現它會很棒,但訪問者模式不是為此而設計的。

不會為Serializable提供合理實現的類不應該實現它。 無論如何,這個問題很不清楚。 Serializable接口是否在您的設置中聲明了accept()方法? 它不應該。 如果不可序列化的項目可能是項目的特殊子類,您就不能在訪問者中實現visit(MyNotSerializableItem)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM