我有一大堆的類,如: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是的,您仍然需要修改產品,但不必將數據庫代碼放入產品。 –