我有一大堆的类,如:OO设计问题
abstract class Product {
BigDecimal price
String name
}
class EdibleProduct extends Product {
Date sellByDate
}
class FinancialProduct extends Product {
Currency currency
}
在现实中有2级以上的子类,每个子类将多个属性添加到父。我想用这些类与API,如:
interface ProductDao {
Product create(Product product)
Product update(Product product)
}
通过上面提出的幼稚模型中,一个需要做这样的事情的ProductDao
方法的实现内
Product create(Product product) {
// save the fields common to all Products
if (product instanceof EdibleProduct) {
// save fields specific to this implementation
} else if (product instanceof FinancialProduct) {
// save fields specific to this implementation
}
}
显然,像这样投射到执行类型很糟糕,所以我正在寻找创建,更新等不同类型产品的方法,而不涉及实现类型(至少在ProductDao
实现中)。
我已考虑过多种解决方案,其中大部分涉及移除子类和移动产品的具体领域为单独的类,都实现了相同的接口,像
interface ProductType {}
class EdibleProductType {
Date sellByDate
}
class FinancialProductType {
Currency currency
}
再加入ProductType
场Product
。我也考虑过使用装饰器,但似乎不能避免沮丧。
实现语言将是Java或Groovy。
据我了解_Visitor_,你仍然需要'产品'中的'acceptVisitor()'。你能否提供支持你想法的代码片段? –
@Op De Cirkel是的,您仍然需要修改产品,但不必将数据库代码放入产品。 –