[英]Implement visitor pattern without specifying all derived types in visitor interface?
[英]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.