我有一個用於管理數據集的6種方法的接口。實現中唯一不同的方法是getSerializedVersion()
和能夠解析序列化字符串的構造函數。當實現僅在單一方法中有所不同時,推薦哪種設計模式?
public interface DataSets {
public void addEntry(...);
public void removeEntry(...);
public void manipulateEntry(...);
public SomeType getEntry(...);
public List<SomeType> getAllEntries();
// This differs:
public String getSerializedVersion()
}
我無法更改接口。
我的第一個想法是生成一個抽象類並實現前五個方法。對於具體的實現(例如DataSetsXML
,DataSetsYAML
,...),我只需要實現getSerializedVersion()
以及能夠讀取字符串並初始化對象的構造函數。
爲了使它更具可測性,不同的設計可能會更好(https://stackoverflow.com/a/7569581),但哪一個?
答案可能是主觀的,但我認爲有不同的方法的一些一般規則或至少(目標)的優點和缺點,...
您可以使用單個類,並委託給序列化程序,作爲參數傳遞給構造函數,以實現getSerializedVersion()。有N個串行器實現(YamlSerializer,XmlSerializer等) –
@JBNizet的答案是要走的路。從職責責任的角度來看,序列化似乎與管理數據集不同。不需要使用抽象類並進一步編碼這個設計錯誤,imo。 – Cardano
@JBNizet:你能否從你的評論中寫出答案。 – Edward