考虑以下示例代码:
// delivery strategies
public abstract class DeliveryStrategy { ... }
public class ParcelDelivery : DeliveryStrategy { ... }
public class ShippingContainer : DeliveryStrategy { ... }
和以下示例订单类:
// order (base) class
public abstract class Order
{
private DeliveryStrategy delivery;
protected Order(DeliveryStrategy delivery)
{
this.delivery = delivery;
}
public DeliveryStrategy Delivery
{
get { return delivery; }
protected set { delivery = value; }
}
}
当我派生一种新类型的订单类时,它将继承 DeliveryStrategy 类型的 Delivery 属性。
现在,当必须使用 ParcelDelivery 策略交付 CustomerOrders 时,我们可以考虑在 CustomerOrder 类中的 Delivery 属性中使用“ new ”:
public class CustomerOrder : Order
{
public CustomerOrder()
: base(new ParcelDelivery())
{ }
// 'new' Delivery property
public new ParcelDelivery Delivery
{
get { return base.Delivery as ParcelDelivery; }
set { base.Delivery = value; }
}
}
(CustomerOrder 显然需要确保与 Order 兼容(多态))
这允许在 CustomerOrder 上直接使用 ParcelDelivery 策略,而无需强制转换。
你会考虑使用这种模式吗?为什么/为什么不?
更新:我想出了这种模式,而不是使用泛型,因为我想将它用于多个属性。我不想对所有这些属性使用泛型类型参数