使用通用的DAO模式,我定義了通用接口:道註冊表重構
public interface GenericDao<T extends DataObject, ID extends Serializable> {
T save(T t);
void delete(ID id);
T findById(ID id);
Class<T> getPersistentClass();
}
然後我實現的默認GenericDaoImpl實現與下面的構造函數執行這些功能:
public GenericDaoImpl(Class<T> clazz) {
this.persistentClass = clazz;
DaoRegistry.getInstance().register(clazz, this);
}
點DaoRegistry的組成部分是通過與它相關的類來查找Dao。這讓我向GenericDaoImpl並覆蓋爲對象的方法需要特殊處理:
DaoRegistry.getInstance().getDao(someClass.getClass()).save(someClass);
雖然它的工作原理,有我不喜歡它的幾件事情:
- DaoRegistry是單
- 調用保存的邏輯是複雜
有沒有更好的方式來做到這一點?
編輯 我不想辯論Singleton是否是anti-pattern或不是。
如果你不喜歡單身的事情,那麼春天會讓你很不高興。 – skaffman
Spring bean與單例模式不同,但這是另一個論點全部在一起=) – ltfishie
不,他們沒有。根據定義,單例在一個範圍內是唯一的。區別僅在於範圍。 Classic singleton = ClassLoader,Spring Bean = Application。這個概念保持不變。 –