我在下面的代码中写了以下GenericDAO
abstract public class DAO <T extends AbstractBusinessObject> {
// CRUD: create, read, update, delete
public abstract T create(Class<T> abObj);
public abstract T read();
public abstract void update(T abObj);
public abstract void delete(T abObj);
但偶尔当我实现自定义DAO(例如DAOinMemory)及其类似create
的方法时,我必须
写下面的代码:
public T create(Class<T> abstractObjectType) {
IDGenerator IDGenerator = IDGenerator.getInstance();
if (BusinessEntityFirst.class.isAssignableFrom(abstractObjectType)) {
BigInteger id = IDGenerator.getID();
BusinessEntityFirst bef = new BusinessEntityFirst(id);
return (T) bef;
}
if (BusinessEntitySecond.class.isAssignableFrom(abstractObjectType)) {
BigInteger id = IDGenerator.getID();
BusinessEntitySecond bes = new BusinessEntitySecond(id);
return (T) bes;
}
if (BusinessEntityThird.class.isAssignableFrom(abstractObjectType)) {
BigInteger id = IDGenerator.getID();
BusinessEntityThird bet = new BusinessEntityThird(id);
return (T) bet;
}
if (abstractObjectType == null) {
throw new NullPointerException("Can't create instance for:" + abstractObjectType);
}
return null;
}
我看到create
- 方法实现的某些部分看起来像 Spaghetti代码(使用.isAssignableFrom
方法的三个if条件)并且我无法做任何事情战胜它。你可以建议如何为这些部分制作一个共同的代码片段以摆脱Spaghetti代码吗?
答案 0 :(得分:0)
您可以查看Factory Design Pattern和Abstract Factory Design Pattern,这可以帮助您设计代码。在您的情况下,抽象工厂模式将是一个更好的设计选择。
工厂设计模式根据需要处理对象的创建。因此,在您的情况下,您将拥有一个对象生成器类,它将从工厂生成所需的对象。